Logic App总是需要30秒才能读取空的服务总线队列

时间:2018-09-19 08:59:25

标签: azureservicebus azure-logic-apps

我有一个逻辑应用程序,该应用程序具有“从服务总线队列中获取消息(窥视锁定)”操作。我经常希望该操作返回而没有任何消息,因此我检查了响应的长度,看它是否为0,然后进行一些工作来填充队列。

我的问题是,当队列为空时,读取服务总线的操作将花费30秒。这样会给Logic App调用者一个响应,从而导致严重的延迟。

如何使该操作超时?

我查看了“动作”设置,其中有一个描述

  

超时

     

限制异步模式可能花费的最大持续时间。注意:这不会更改单个请求的请求超时。

我不确定这意味着什么,但是我本以为应该将响应的异步轮询持续多长时间。

将此值更改为PT10S无效。

我怀疑问题在于对服务总线的呼叫是一个长时间轮询,硬编码为30秒后超时-任何人都可以确认或驳斥此问题吗?

有什么办法可以减少这个时间?

1 个答案:

答案 0 :(得分:0)

  

超时

     

限制异步模式可能花费的最大持续时间。注意:这不会更改单个请求的请求超时。

此设置不会影响操作持续时间,因为与异步回调相反,服务总线“获取操作和触发器”将实现单个http请求(将队列轮询到内部)。

  

我怀疑问题在于对服务总线的呼叫是一个长时间轮询,硬编码为30秒后超时-任何人都可以确认或驳斥此问题吗?

根据我对连接器的了解,“获取服务总线操作和触发器”会执行30秒的长时间轮询,您无法更改。

更新除了按照下面的建议使用Azure函数之外,您还可以在实现并行分支的Nested Logic App中抽象GetMessages调用。如果主分支花费的时间超过阈值,则一个分支将从队列中读取,而另一个分支将返回超时响应。 http://mikaelsand.se/timeout-and-parallel-branches-in-logic-apps/

解释了该模式

HTH