【问题标题】:Sorting Service Bus Queue Messages对服务总线队列消息进行排序
【发布时间】:2019-07-24 17:06:49
【问题描述】:

我想知道是否有一种方法可以将元数据甚至多个元数据实现到服务总线队列消息中,以便稍后在应用程序中使用以进行排序,但仍保持队列中的 FIFO。

所以简而言之,我想做的是: 维护 Fifo,这是队列中的先进先出结构,但是随着消息从不同的来源传入并插入队列,我希望能够对消息来自哪个来源进行排序,例如元数据。

我知道这可以通过主题来实现,您可以在其中向消息插入属性,但我也不确定是否可以在主题消息中实现多个属性。

希望我清楚我的要求是可能的。

【问题讨论】:

  • 那么什么是排序呢?您要更改顺序还是只读取元数据(属性)?
  • 是的,我想读取元数据以便能够在我的应用程序中对其进行排序。

标签: queue metadata azureservicebus azure-servicebus-topics


【解决方案1】:

我假设您使用 .NET API。如果出现这种情况,您可以使用Properties 字典来写入和读取您的自定义元数据:

BrokeredMessage message = new BrokeredMessage(body);
message.Properties.Add("Source", mySource);

您也可以随意添加多个属性。这对于队列和主题/订阅都是一样的。

【讨论】:

  • 很有趣,我一定会去看看,谢谢!
【解决方案2】:

我想知道是否有一种方法可以将元数据甚至多个元数据实现到服务总线队列消息中,以便稍后在应用程序中使用以进行排序,但仍保持队列中的 FIFO。

要在队列中保持 FIFO,您必须使用 Message Sessions。如果没有消息会话,您将能够在队列本身中维护 FIFO。您可以设置自定义属性并在您的应用程序中使用它,并在收到乱序的消​​息后对其进行分类,但您不会像在原始问题中提出的那样以 FIFO 顺序接收消息。

如果您放弃在队列中保留订单的要求,@Mikhail 提供的答案将适用于基于自定义属性的进程内排序。请注意,进程内排序并非易事。

【讨论】:

  • 好的,所以我不知道我是否完全超出了这里的范围,但如果我正确理解您的评论,您的意思是:消息会话将传入消息按正确的顺序放置在以后在另一端以正确的顺序轮询?也就是说,如果我有一个逻辑应用程序提取消息,它们仍然会因为逻辑应用程序是可扩展/线程化的,所以它们仍然会以更少的顺序出现?
  • 我已经阅读了一些关于消息会话的信息,该消息需要一个会话 ID。那么实现一个的最佳方法是什么,以及如何在最佳实践中处理如何增加每条消息的会话 ID?
  • 重要的是提供详细信息作为您使用的服务/环境以获得更好的答案:) 如果您使用的是逻辑应用程序,那么您就有了所谓的“顺序护航”的实现图案。为此,逻辑应用提供了一个模板,可以将按顺序交付与 Azure 服务总线消息会话相关联。上面有一个帖子,你可以阅读here
  • “什么是最好的实现方式” - 这取决于。是否将所有消息作为单个会话的一部分。如果您有多个会话,您将考虑配置会话 ID 下一个可用,如果一个会话包含所有消息,则配置 下一个可用。希望有帮助。干杯。
  • 我认为这让我指出了正确的方向,我一定会调查此事,感谢您的快速回答。
猜你喜欢
  • 2014-11-03
  • 2017-11-01
  • 2020-10-08
  • 1970-01-01
  • 1970-01-01
  • 2010-11-02
  • 2021-12-13
  • 2017-11-07
相关资源
最近更新 更多