【问题标题】:Have a message queue subscribe to a topic让消息队列订阅主题
【发布时间】:2012-11-29 13:56:48
【问题描述】:

我有一个有两个订阅者的主题。但是,其中一个订阅者将部署在集群中。因此,实际上(我认为?)集群将被视为多个订阅者。 我需要确保集群只使用一条消息。

我不知道执行此操作的选项。 是否可以在集群和主题之间插入一个队列,然后让集群应用程序只使用插入的队列?

如果可能,一般来说,如何让队列“订阅”主题?

我听到的另一个想法是在集群中创建克隆订阅者,以前有人听说过这个来解决这个问题吗?

另一个想法是取消主题,只使用两个队列代替它,这似乎是一个安全的解决方案?

使用 WebSphere MQ

【问题讨论】:

  • 当您说“其中一个订阅者将部署在集群中”时,您是指应用服务器集群还是 WebSphere MQ 集群?因为在一种情况下,您有多个实例竞争队列上的消息,而在另一种情况下,您有多个队列实例,每个实例都有自己的数据副本。答案有很大不同,这取决于您对“集群”一词的预期用途。如果您的意思是应用服务器集群,那么 Shashi 的响应效果很好。
  • 是的,我的意思是应用服务器集群,谢谢

标签: jms websphere ibm-mq


【解决方案1】:

您可以使用持久订阅来实现此目的。

以管理方式创建一个持久订阅并指定一个目标,基本上是一个队列,它将接收在指定主题上发布的发布。然后,您的集群应用程序可以从该目的地获取消息。由于发布是从队列中接收的,因此只有一个应用程序实例会收到消息。

以下命令为主题“/SPORTS/HOCKEY”创建持久订阅,目标队列为 Q1。

DEFINE SUB(SPORTSUB) TOPICSTR(/SPORTS/HOCKEY) TOPICOBJ(SPORT) DESTQ(Q1)

【讨论】:

  • 要清楚,DESTQ 将是“介于”appl 集群和主题之间,对吗?
  • 如果我这样做,是否还有其他订阅者订阅该主题,而不仅仅是 DESTQ?
  • 是的,DESTQ 位于应用程序和主题之间。是的,该主题可能还有其他订阅者,包括持久订阅者和非持久订阅者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-17
  • 1970-01-01
  • 2015-03-01
  • 2018-09-04
  • 1970-01-01
  • 2018-02-05
相关资源
最近更新 更多