【发布时间】:2021-01-19 00:14:39
【问题描述】:
我有一个使用 ActiveMQ 的 JAVA 应用程序。按照为每个消费者使用特定“会话”的建议(以避免来自不同线程的会话并发问题),我在创建每个新消费者之前创建一个新会话。这些消费者使用 MessageListener 以异步方式收集他们的消息。
当消费者关闭时,我还想关闭用于(并显式创建)创建此消费者的会话,但我无权访问用于创建我要关闭的特定消费者的会话(消费者的“MessageConsumer”对象中不存在此方法)。 我不想让所有这些会话保持打开状态,因为消费者正在动态连接和断开连接,并且打开(和未使用的)会话的最终数量会非常高。
有没有办法访问用于创建使用 MessageListener 的特定“消费者”(MessageConsumer 对象)的“会话”?
当使用 MessageListerner 的使用者关闭时,还有其他方法可以关闭会话吗?
是否还有一种可能是自动清除没有任何相关资源(消费者、生产者等)的“会话”?
这是我的代码的 sn-p:
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer consumer = session.createConsumer(session.createQueue(queueName));
consumer.setMessageListener(new CustomMessageListener(locWSInstance));
【问题讨论】: