当前位置: 首页 > 知识库问答 >
问题:

从azure函数延迟或放弃消息servicebus队列

郎曜文
2023-03-14

在我的场景中,我正在向ServiceBus队列发送消息。我有一个Azure函数,正在触发该队列。该函数接收消息,使用其他一些APIendpoint检查状态,如果它被处理,我会发送一封电子邮件。但是当该请求的处理没有完成时,我想把消息放在队列上(有一些延迟或未来稍后的预定时间),以便函数再次接收相同的消息并再次检查。命令对我来说没那么重要。

到目前为止,我已经尝试了以下方法:

代理消息。放弃()-这会立即触发函数-不符合要求的行为BrokeredMessage。具有ScheduledQueueTimeUTC属性的放弃()——行为相同

代理消息。Defer()-这里我需要跟踪消息序列号以使用OnReceive接收消息-不方便(甚至在函数中可能?)

将相同的消息重发到队列中,并将其属性设置为稍后的时间-为此,我需要再次引用队列客户端并发送消息-这种方式可以工作,但感觉不对(因为我必须完成我收到的实际消息并从函数内部分派另一条消息)。

此外,我尝试过使用WebJobs和Azure存储队列-几乎与我在那里遇到的问题相同。

有没有更好的方法来完成这件事?我也愿意使用其他方法。我不确定我是否可以实现与LogicApp类似的东西?

谢谢Sanjay

共有1个答案

齐昊
2023-03-14

我认为你最好的选择是传递一个新的信息。为此,使用输出绑定并返回一个具有适当BrokeredMessage值的实例。如果在函数中以BrokeredMessage的形式获取原始消息,则可以克隆原始消息。可能需要使用ICollector进行此输出绑定,因为输出是有条件的。

函数运行时调用完成/根据函数执行结果放弃方法本身,因此不能在函数内部手动执行。

同样的方法也应适用于存储队列。

 类似资料:
  • 使用启用会话(消息排序)的Azure ServiceBus队列,我的会话需要持续几分钟到几个小时。 为此,我将QueueClient配置如下: 并按如下方式开始接收消息: 在几次(1到6次之间)成功(几乎是瞬时的)消息接收回调之后——无论是对于新会话还是现有会话,接收处理程序都会停止触发。使用,我可以看到位于servicebus队列上的消息。有趣的是,它们都有一个DeliveryCount=1。过

  • 我有两个消费者(不同的应用程序)连接到Azure队列。我可以或消息,在消费过程中,我可以或消息。裁判:http://msdn.microsoft.com/en-us/library/azure/hh851750.aspx. 我确定我想使用,然后消息,因为我希望它们在两个应用程序中被接收。我想我应该将队列上的消息生存期设置为10秒,作为删除机制。 然而,由于消息似乎在10秒钟后被删除,因此在这10秒

  • 我一直在关注位于的Azure Service Bus REST API文档https://docs.microsoft.com/en-us/rest/api/servicebus/ 在阅读第一条消息之前,我需要知道队列中的消息总数。但是,我看不到一个请求/命令来简单地获取给定队列中消息的总数/计数。 这是否不可能通过REST API并且仅适用于SDK? 谢谢

  • > 在Azure Service Bus主题中,我有两个订阅subscription1和subscription2。我正在向主题发送一条消息。在subscription1中,消息被放弃,在subscription2中,消息被处理。subscription1中的已放弃消息是否将再次发送给两个订阅或仅发送给已放弃消息的订阅。 我也有点困惑,死信队列将是所有订阅都通用的,还是每个订阅都有一个单独的死信队

  • 当使用JavaSDK(0.4.1)从SB队列检索消息时,即使所讨论的队列为空,也会返回非空。对该结果调用将返回一个非空的。我怎么知道我在一个空队列上打了接听电话?显然,在分布式并发系统中,查询大小不是一个选项。 我使用模式,队列是新创建的,所以我知道它是空的。 根据docs,对API的底层调用应该返回204的状态码。在返回的结果或消息中,我找不到任何方法访问该代码。

  • 我正在尝试Azure服务总线队列。我有以下代码: 队列发送: 接收代码: 我看到,每当我打电话放弃时,信息都被写上了死信。我的假设是它应该被激活,并且可以被另一个客户接收。