我有一个生产者,它发送与队列中产品的购买/取消相关的消息,并基于该消息计算产品的可用性。
如果它以错误的顺序在多个消费者上处理,我的可用性计算将是错误的。
现在的问题是我想获取与正在处理的一种产品相关的所有消息,这些消息是针对哪个消费者进行处理的。
有人可以建议我怎么做。
我目前使用的工具是 TIBCO EMS、C# windows 服务。
我不确定混合竞争消费者和序列是否可行……但这里有两个可能会激发你的选择:
选项 A
好的......我在这里猜测很多事情。
假设 :
我必须做出这些假设,因为进程序列和竞争负载共享通常不兼容,除非您引入另一种机制(例如:消息选择器、主题等)
综上所述,然后您将队列设置为“独占”。并且有多个客户端连接...只有一个会真正收到消息...因此处理顺序永远不会出错。只有当第一个失败时,才会使用“竞争”(等待)客户端。
选项 B
好的...如果我在上面错了,并且您确实需要多个客户端同时处理,并且仍然坚持与特定产品相关的消息的顺序...试试这个:
让发送应用程序在每条消息中设置一个带有产品编号的 JMS 标头。然后,您可以使用与非独占队列(默认)上的新标头(例如:productID=1234)绑定的消息选择器设置多个客户端。在这种情况下,客户端并没有真正竞争,但它们至少共享负载,并按顺序处理有关产品 ID 的所有消息。缺点?您的消息选择器必须涵盖所有产品 ID……如果您有数千个,则实际上不可行。
选项 C
与选项 C 类似,您可以将产品分成多个队列(例如:产品类别),并为每个类别设置一个客户端,按顺序处理所有消息。在这种情况下,客户端上不需要消息选择器。BUT,需要引入排序机制(Topic+Message Selectors,以及ESB或者sender自己排序)