2

我有一个生产者,它发送与队列中产品的购买/取消相关的消息,并基于该消息计算产品的可用性。

如果它以错误的顺序在多个消费者上处理,我的可用性计算将是错误的。

现在的问题是我想获取与正在处理的一种产品相关的所有消息,这些消息是针对哪个消费者进行处理的。

有人可以建议我怎么做。

我目前使用的工具是 TIBCO EMS、C# windows 服务。

4

2 回答 2

1

我不确定混合竞争消费者和序列是否可行……但这里有两个可能会激发你的选择:

选项 A

好的......我在这里猜测很多事情。

假设 :

  • 您需要竞争消费者以确保安全(例如:第一个失败),而不是负载共享。
  • 您需要按顺序处理所有消息

我必须做出这些假设,因为进程序列和竞争负载共享通常不兼容,除非您引入另一种机制(例如:消息选择器、主题等)

综上所述,然后您将队列设置为“独占”。并且有多个客户端连接...只有一个会真正收到消息...因此处理顺序永远不会出错。只有当第一个失败时,才会使用“竞争”(等待)客户端。

选项 B

好的...如果我在上面错了,并且您确实需要多个客户端同时处理,并且仍然坚持与特定产品相关的消息的顺序...试试这个:

让发送应用程序在每条消息中设置一个带有产品编号的 JMS 标头。然后,您可以使用与非独占队列(默认)上的新标头(例如:productID=1234)绑定的消息选择器设置多个客户端。在这种情况下,客户端并没有真正竞争,但它们至少共享负载,并按顺序处理有关产品 ID 的所有消息。缺点?您的消息选择器必须涵盖所有产品 ID……如果您有数千个,则实际上不可行。

选项 C

与选项 C 类似,您可以将产品分成多个队列(例如:产品类别),并为每个类别设置一个客户端,按顺序处理所有消息。在这种情况下,客户端上不需要消息选择器。BUT,需要引入排序机制(Topic+Message Selectors,以及ESB或者sender自己排序)

于 2016-06-24T18:20:40.193 回答
0

您的问题的另一种解决方案可能是使用 Sequencing Keys。您可以通过在JMS 队列接收器的 misc 选项卡中指定键值来使用序列

排序键

于 2016-07-13T01:53:37.513 回答