我有一个 Tibco EMS 主题订阅者,我需要在不同实例之间进行负载平衡。每个发布到主题的消息都需要由每个订阅者负载平衡组的一个(并且只有一个)实例接收。
仅使用全局主题和平衡的 EMS 连接 ( tcp://localhost:7222|tcp://localhost:7224
) 会导致每个订阅者负载平衡组的所有实例都收到相同的消息,从而产生重复消息。
您知道负载平衡主题订阅者的任何替代方案吗?
我有一个 Tibco EMS 主题订阅者,我需要在不同实例之间进行负载平衡。每个发布到主题的消息都需要由每个订阅者负载平衡组的一个(并且只有一个)实例接收。
仅使用全局主题和平衡的 EMS 连接 ( tcp://localhost:7222|tcp://localhost:7224
) 会导致每个订阅者负载平衡组的所有实例都收到相同的消息,从而产生重复消息。
您知道负载平衡主题订阅者的任何替代方案吗?
使用 EMS 8.0 添加了新概念共享订阅,只有一个订阅接收具有相同订阅名称的消息,通过 EMS 用户指南文档,它可能会对您有所帮助。
虽然之前的两个答案都是有效的,但最自然的方法是根本不使用主题。
使用队列代替 pf 主题可以完成整个工作(以循环方式进行负载平衡)。
你可以:
A)将主题桥接到队列并重新配置订阅者以从队列中读取。队列的行为与主题不同,因为消息仅由一个订阅者获得,而不是由所有订阅者获得。
B) 在主题上创建多个持久订阅者,选择器在持久订阅者之间划分消息。例如,如果消息具有按顺序增加的属性“id”:
create durable topic DURABLENAME1 selector="(id - 2 * (id / 2)) = 0"
create durable topic DURABLENAME2 selector="(id - 2 * (id / 2)) = 1"
选择器只是一个模数,因此一半的消息将在一个持久消息上进行,一半在另一个上。