gpt4 book ai didi

c# - 如何实现 EMS 竞争消费者和分销商

转载 作者:太空宇宙 更新时间:2023-11-03 12:43:58 24 4
gpt4 key购买 nike

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

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

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

有人可以建议我怎么做吗?

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

最佳答案

我不确定混合竞争消费者和序列是否可行...但这里有两个可能会启发您的选项:

选项A

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

假设:

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

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

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

选项 B

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

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

选项 C

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

关于c# - 如何实现 EMS 竞争消费者和分销商,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37990051/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com