gpt4 book ai didi

jms - ActiveMQ 如何处理关闭的 session

转载 作者:行者123 更新时间:2023-12-03 21:42:12 33 4
gpt4 key购买 nike

我使用 ActiveMQ 来排队电子邮件消息,消费者读取队列并发送电子邮件。

在启动时,我注册了一个生产者并永久缓存它。

PooledConnectionFactory factory = new PooledConnectionFactory(new ActiveMQConnectionFactory(jmsBrokerUserName, jmsBrokerPassword, activeMQBrokerURL));
Connection connection = factory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Destination destination = session.createQueue(queueName);
MessageProducer producer = session.createProducer(destination);

有时,当连接关闭时,生产者无法将消息加入队列。
Caused by: javax.jms.IllegalStateException: The Session is closed
at org.apache.activemq.ActiveMQSession.checkClosed(ActiveMQSession.java:767) ~[activemq-client-5.10.0.jar:5.10.0]
at org.apache.activemq.ActiveMQSession.configureMessage(ActiveMQSession.java:755) ~[activemq-client-5.10.0.jar:5.10.0]
at org.apache.activemq.ActiveMQSession.createTextMessage(ActiveMQSession.java:438) ~[activemq-client-5.10.0.jar:5.10.0]
at org.apache.activemq.jms.pool.PooledSession.createTextMessage(PooledSession.java:242) ~[activemq-jms-pool-5.10.0.jar:5.10.0]

有人可以让我知道处理封闭式 session 的最佳方法是什么吗?我应该重新注册我的生产者吗?或者有没有办法重新打开 session ?

最佳答案

使用 JMS 时,您不应该真正缓存 JMS session (以及任何挂起的东西,例如生产者)。原因是 JMS Session 是 JMS 中的工作单元,因此应该是一个短暂的对象。例如,在 Java EE 世界中,JMS Session 也可能与全局事务一起登记,因此需要正确设置范围。

JMS Session 实例不能被多个线程同时使用,因此最好的建议是在您正在使用的每个线程上创建 JMS Session 并在完成该工作单元(发送消息或交易中的消息)

关于jms - ActiveMQ 如何处理关闭的 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24494255/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com