首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否存在缓冲Azure服务总线中用于批处理的相关消息的模式?

是否存在缓冲Azure服务总线中用于批处理的相关消息的模式?
EN

Stack Overflow用户
提问于 2022-04-08 17:01:43
回答 1查看 277关注 0票数 0

我正在构建一个解决方案,它基于Azure服务总线队列中的消息处理对记录的更改。队列包含用于更改多个不同记录的交错消息序列,并在每条消息中触发Azure函数以处理更改并将其存储在后端服务中。变更队列上的每条消息都与单个记录相关,并包含一个属性:recordId

问题是,使用每条消息调用后端服务有一定的开销,而且经常会有多条消息出现在队列中,以便快速连续地保存单个记录。我希望允许对每个记录进行多个“缓冲区”更改,这样可以减少后端服务的调用频率,但需要进行一批更改。

我正在使用带有Azure函数的服务总线( 会话特征 of Service Bus ),在使用recordId作为会话名称将每条消息转发到会话队列之前监视更改队列。理想情况下,我希望消息在会话队列中缓冲,直到:

  1. 对于那个recordId,有一段时间是安静的(例如,10秒内没有变化)
  2. 或者,会话大小达到限制(例如,对记录的30个更改)

问题是:如何根据这些场景触发每个会话的处理?我已经研究过使用预定消息来处理第一个场景,但是接下来我需要一种可靠的重新调度方法来创建一个滑动超时。类似地,除了在某个地方存储计数器之外,似乎没有一种很好的方法来监视会话的大小。

我试图完全使用服务总线和函数来解决这个问题,尽管我对任何其他想法都很开放。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-08 17:30:58

您想要实现的目标与服务意图和功能之间存在不匹配。让我们先来看看会议。

会话打算按照发送的顺序处理消息。这是Azure服务总线在无序队列之上为您提供FIFO队列的一种方式,您通常会得到并消除竞争消费者处理消息的机会,从而导致无序处理。会话消息从队列中“耗尽”,在使用最后一个队列之后,在配置的会话超时之后,会话的使用者将转移到下一个可用会话。

计划消息是未来为延迟处理而发送的消息。调度是在每条消息基础上完成的,不能应用于组(如会话)。您当然可以安排日程安排大致相同的时间,但这将是棘手的-如何知道什么时候安排第一条消息,当你还没有收到最后一条消息。

带函数的批处理接收是一种请求向上的方法--向发送一批消息,并不意味着您将得到确切的数字。如果会话的所有消息都在队列中,则会话和批处理接收的组合可以工作。虽然您可能不会在单个函数执行中处理与给定会话相关的所有消息,但仍然会按照发送这些消息的顺序和频率进行处理。

总之,您可以通过将IsBatchedIsSessionsEnabled设置为true来减少函数调用的数量,并将消息按发送的相同顺序分批传递以进行处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71800802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档