为单个订阅提供服务的多个进程会导致MQRC_SUBSCRIPTION_IN_USE

Joe*_*ger 5 tibco jms businessworks mq ibm-mq

我有一个发布到JMS主题的TIBCO BusinessWorks流程 - 我们称之为TOPIC.A - 有一个订阅该主题的流程名为SUBSCRIBE.A.

我遇到的问题是第一台开始监听SUBSCRIBE.A的服务器挂钩很好.运行完全相同进程的其他3个服务器收到错误"WebSphere MQ调用失败,带有compcode'2'('MQCC_FAILED')原因'2429'('MQRC_SUBSCRIPTION_IN_USE')"

这对于企业软件来说不是合理的行为,我知道WebsphereMQ,JMS和TIBCO Businessworks都可以很好地扩展,所以我必须遗漏一些东西.我只希望每个事件处理一次,但是由于故障转移原因和剪切体积原因,单个盒子不会这样做.

如何让群集中的所有4台服务器为订阅SUBSCRIBE.A提供服务?

小智 5

我同意这对于企业软件来说似乎不是合理的行为 - 但这种限制是由 JMS 规范强加的。JMS 1.1 规范第 6.66.1 节规定“一次只能有一个会话可以拥有用于特定持久订阅的 TopicSubscriber”。

也就是说,WebSphere MQ 确实提供了一个特定于供应商的选项,允许您执行您想要的操作:查看CLONESUPP连接工厂属性。这记录在CLONESUPP属性页面的信息中心中。

虽然它特定于 MQ,但如果您使用受管理对象指定这一点,则您的代码将不需要使用任何特定于供应商的方法。