1,consumer,connection何时关闭
1)当我们在使用设置监听的方式接收消息的时候,不可以在程序中主动关闭consumer,因为消息是异步接收的,此时如入关闭,会造成在没有接收消息的情况下消费者就被关闭,这个监听器也就没有什么意义了。
2)使用receive()方式接收消息,如果在接受到消息后不关闭当前连接,那么当我们在新建一个连接的时候(使用线程创建新的连接),无法从消息队列中拿到消息。
接收的结果为:
虽然,此时我们已经建立了新的连接,但是由于在原先连接consumer的receive()方法处处于阻塞状态,所以,新的连接还是无法接受到MQ消息。
如果使用循环使当前的consumer再次调用receive()方法,就可以接受到新的消息了。
2,session不同的创建方式
1) 当我们使用事务的方式创建session的时候,在发送完MQ消息后,必须添加session.commit(),否则,这些发送的消息不会加入消息队列。
如图消息被打印,但是,在队列中却差看不到。
添加session.commit();
2) 使用非事务的方式创建session,没有session.commit(),也被加入消息队列。