唯有记录才能弥补中年人的记忆能力
碎碎念:
- 本系列仅记录java开发中碰到的问题,仅供参考,实际用途并不大,仅供本人使用,莫对号入座
1. javax.jms.IllegalStateException: Illegal use of receive() from multiple threads
1. 1 问题代码示例:
public class JMSMessageListener implements MessageListener {
public void work() {
MessageConsumer consumer = session.createConsumer(destination);
// 此处添加消息监听
consumer.setMessageListener(this);
Message msg = null;
while (true) {
// 此处接收消息
msg = consumer.receive();
}
}
public void onMessage(Message message) {
// 此处消息监听处理
}
}
1. 2 问题分析:由代码可知,既然已经添加了消息监听,那就没必要在接收阻塞式处理了,这是本人着急情况下产生的,但异常问题指向的是不能再多线程下使用receive方法,按问题代码写法再MessageListener实际上也创建自身的线程去实现receive的阻塞式获取,要确保消费端代理获取的唯一性,故有此判断抛出的错误,解决方法当然是2选一,还是推荐用MessageListener处理