当前位置: 首页 > 知识库问答 >
问题:

消息监听器中的JMS连接池

方梓
2023-03-14

目前,我正在开发一个独立的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如何处理分配给它们的连接。

谢谢你。

共有1个答案

周和安
2023-03-14

这里的关键对象是会话,而不是连接;会话将在这里使用消息消耗(异步或其他方式)进行主要工作。

建议尽可能广泛地尝试和共享连接。临时目的地在连接级别上有作用域。所以使用池化是一个好主意;共享这种连接是完全可能的。

然而,我还要说,也许值得考虑将会议集中起来。这里的代码将创建一个新的会话,每次通过该代码,这将意味着将创建到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启动时没有任