首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >持久订阅者不接收来自主题的消息。

持久订阅者不接收来自主题的消息。
EN

Stack Overflow用户
提问于 2012-03-06 11:50:26
回答 1查看 2.6K关注 0票数 1

我使用订阅服务器SYSTEM.JMS.D.SUBSCRIBER.QUEUE和客户端ID作为setClientID("USER1"),并使用topicSubscriber =topicSession.createDurableSubscriber(主题"SUB1");

topicSubscriber是创建的,在尝试使用这个topicSubscriber.receive()接收消息时,它没有接收来自主题的消息,但是主题中有消息。

有谁能说为什么它没有接收到消息,以及我是否需要修改任何队列配置。

任何帮助都是非常感谢的。

提前谢谢。

我的编码中已经有了topicConnection.Start(),我也在TopicSession中签了名--这里没有Start()方法。

与非持久订阅服务器方法topicSession.createSubscriber(主题)相同的代码正在工作,但对于持久性,它不起作用。

谢谢

对不起,我是说topicConnection.Start()。值得一查。

我得到了持久订阅者无法工作的答案,我的队列深度已经达到最大队列深度,因此订阅者无法订阅消息。

例如。队列SYSTEM.JMS.D.SUBSCRIBER.QUEUE的最大队列深度设置为100,如果我们检查当前队列深度,如果达到100,订阅服务器将无法工作。

作为尝试用临时主题创建的另一种方式,在创建持久的订阅者topicSession.createDurableSubscriber(主题,“SUB1”)时,会出现一个错误;

JMS异常::javax.jms.InvalidDestinationException: MQJMS0003:目的地不被理解或不再有效

有人能帮我解决这个错误吗。

提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-06-18 17:04:48

问题似乎在于您如何使用SYSTEM.JMS.D.SUBSCRIBER.QUEUE。您似乎正在将消息和订阅服务器定向到此队列,作为持久订阅的目标。IBM使用该队列来管理持久订阅。

通常情况下,名称以SYSTEM开头的队列用于MQ使用的内部系统。其中一些(如SYSTEM.ADMIN.*.EVENT )可以从其中获取消息,但您也不会将它们用作不相关消息的订阅目的地。

许多教程使用SYSTEM.DEFAULT.LOCAL.QUEUE作为消息的目的地,但这只是因为队列已知存在于MQ的所有版本中,而MQ只使用队列的定义,而不使用队列的内容。教程编写者(这里的IBM同样有罪)更容易指出SYSTEM.DEFAULT.LOCAL.QUEUE,然后引导学生了解创建自己队列的需要和方法。因此,尽管最佳实践表明,它不应该是“不使用SYSTEM对象”规则的一个例外,但通常的用法使SYSTEM.DEFAULT.LOCAL.QUEUE成为事实上的例外。

当然,其他的例外是MQ、MFT和IIB的命令队列。这些名称也是SYSTEM.*,但是是为用户设计的,用于与侦听队列的软件进行通信。

请注意,“不使用SYSTEM对象”规则的所有异常都是应用程序和MQ系统资源之间的接口。事件队列是MQ向用户发送信息。命令队列是向系统组件发送信息的用户。订阅既不是这些类别,也不是。订阅的目标被视为应用程序拥有的对象,即使系统代表订阅服务器管理它。

当您想要持久订阅时,要么让系统分配一个永久队列并使用它,要么预先定义一个队列(未命名为SYSTEM.*)并使用该队列。无论您做什么,请不要为了应用程序级别的目的而劫持MQ的内部系统队列。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9583149

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档