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

逻辑应用程序使用会话在服务总线主题订阅中完成消息不会释放锁

索正豪
2023-03-14

我在Azure中的服务总线上有一个主题订阅,锁定持续时间为30秒,并且启用了会话。

我正在使用一个逻辑应用程序来使用峰值锁来获取主题的消息,因为我关心消息的处理顺序。我希望确保具有相同会话id的所有消息都按照它们添加到总线的顺序进行处理,即FIFO。

下面是一个简单的逻辑应用程序的截图,当一个消息到达时,它会被触发(使用5秒轮询的peek-lock),然后它会在完成消息之前等待15秒。

共有1个答案

柴深
2023-03-14

我读到的所有内容都表明,完成一条消息应该立即释放锁,但事实并非如此。是我做错了什么,还是这就是它的工作方式?

LockDuration指示队列(订阅毕竟是一个队列)对竞争的使用者保持消息不可见,以确保当前处理节点能够在LockDuration定义的时间框架内处理它。Renew lock机制确保当前正在处理的消息上的锁被延长,以便在需要时允许比LockDuration更长的处理时间。要记住的一件重要的事情,锁更新并不保证成功。

情景1:

总之,如果您的消息具有相同的会话Id,并且在LA UI中将会话Id配置为“Next Available”,那么它将在整个LockDuration时间框架内锁定消息。如果您想避免这种情况,那么您需要在客户端“关闭队列中的会话”。这将立即释放锁,并立即处理下一个实例

 类似资料:
  • 我正在开发一个Azure逻辑应用,其中有一个服务总线窥视锁触发器。服务总线的消息锁定持续时间为5分钟。我希望每5分钟有一个自动更新令牌机制,以防逻辑应用实例需要超过5分钟,以便该过程可以继续,而无需释放锁,让另一个消费者将消息带走。 有什么方法可以通过Logic应用程序实现这一点吗?

  • 有可能做到这一点吗?

  • 我试图遵循Mark Heath的控制台应用程序示例,使用筛选后的订阅检索服务总线主题消息。但是,我实际上无法检索实际筛选的消息(Filtered1、Filtered2)。消息确实会被使用,但我无法查看它们,因为代码从未像处理非过滤消息(AllMessages)那样进入回调函数。对我错过了什么有什么想法吗? 发件人代码 接收机代码

  • 我正在使用带有.NET核心的Azure服务总线 在我们的应用程序中,我们正在向服务总线发送会话消息。每当我们收到带有session-Id的取消请求时,我们需要删除/删除/完成带有该特定sessionId的消息,而不需要进行任何进一步的处理 但我得到了错误-请求的会话'session-name'不能被接受。它可能被另一个接收器锁定。

  • 我之所以要这样做,是因为我们的服务在部署时配置订阅规则,并且具有消息代理的服务可能会在具有订阅客户端的服务更改规则集和新的业务逻辑之前部署该服务,该服务会发送一组新的消息。我们不希望丢失在部署期间发送的消息,并在新服务退出时处理它们。 干杯。

  • 我试着按照1给出的教程学习。我创建了一个主题,其中有两个主题的订阅,分别使用sqlFilter(user_age<50)和(user_age>=50)。我为消息定义了一个自定义属性user_age。但当我发送关于这个主题的消息时,两个订阅都收到相同的消息,这是胡说八道!知道吗? 我的代码完全是从tuto中给出的代码中获得灵感的,只是我使用这段代码接收来自给定订阅的消息: