目前,我正在开发一个独立的Java应用程序,它连接到Websphere MQ以发送和接收消息。
流处于异步模式,我们使用MessageListener
类来实现,以便在消息准备就绪时从队列中检索消息。使用侦听器初始化消费者的代码如下:
if(connection == null)
connection = getJmsConnection();
try {
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
if (isTopic) {
destination = session.createTopic(destinationName);
} else {
destination = session.createQueue(destinationName);
}
consumer = session.createConsumer(destination);
consumer.setMessageListener(listener);
} catch (JMSException e) {
e.printStackTrace();
}
getJmsConnection()
方法将从池中返回连接,该池使用Apache Commons池库实现。
我的问题是,只要程序在运行,从池中分配给侦听器的连接是否会处于活动状态并绑定到该侦听器?或者该连接是间歇使用的,并且可以被其他进程重用?我们的想法是让发送和接收过程重用池中的连接,但我不确定MessageListener
如何处理分配给它们的连接。
谢谢你。
这里的关键对象是会话,而不是连接;会话将在这里使用消息消耗(异步或其他方式)进行主要工作。
建议尽可能广泛地尝试和共享连接。临时目的地在连接级别上有作用域。所以使用池化是一个好主意;共享这种连接是完全可能的。
然而,我还要说,也许值得考虑将会议集中起来。这里的代码将创建一个新的会话,每次通过该代码,这将意味着将创建到WebSphereMQ队列管理器的新连接。目前还不清楚这将是什么范围,但如果迅速关闭,它可能会成为瓶颈。
在与JMS合作的过程中,我有一个疑问。据我所知,创建同步消息消费者是可能的。但是,我必须以一定的频率启动它,因为事实上没有侦听器。接下来,为了同步使用队列中的消息,我可以创建一个MDB并将池设置为1。我认为这不是一个好的解决办法。 我的目标是在消息出现在队列中时同步地使用它们。从我的观点来看,上述解决方案并不好:1。不时推出的消费者。2.MDB(通常异步)和池设置为1。 有什么适合我的解决方案吗?
开发了一个Spring Boot应用程序,其中包含正在监听JMS队列的JMS消息监听器。在启动Spring Boot应用程序之前,IBMMQ Server中的连接使用率为24。启动Spring Boot应用程序后,连接大小增加到26,即创建2个连接。但我预计在这种情况下只需要创建一个连接。PSB连接详细信息 开发应用程序。SVRCONN,,127.0.0.1,,,,,,,,无,IBM MQ通道,j
这是一个消息侦听器: 在sender类中调用方法时,订阅此主题的所有侦听器都将异步获得此消息。但是我想知道这个特定的是否从消息发送方接收消息。异步怎么做?我假设,如果我想异步地做的话,就不能像其中一个答案中建议的那样,在发送器和侦听器中使用。我需要在sender和listener类中添加什么才能从listener获得消息接收确认?
1.未读消息的监听 未读消息的监听用于提示访客有未读消息,用户可以在咨询入口处添加消息数小红点时使用; (新接口)未读消息的监听接口为OnUnreadNMsgListener;使用新接口的不用再使用下面的老接口。 注册监听方法:NSDKMsgUtils.getInstance().setOnUnreadNMsgListener(OnUnreadNMsgListener onUnreadNmsgLi
我有一个Spring应用程序在独立的JBoss EAP 6.2中运行(带有嵌入式HornetQ提供程序)。 消息被成功地放在队列中(我可以在jboss eap-6.2\独立\data\MessagingJournal\hornetq-data-1.hq中看到它们,因为队列是持久的),但不会被侦听器拾取(侦听器中的断点不会被命中)。我怀疑配置中缺少或错误的东西,但看不出是什么。JBoss启动时没有任