同步阻塞式和异步监听式消费者

同步阻塞方式(receive)

订阅者或接收者抵用MessageConsumer的receive()方法来接收消息,receive方法在能接收到消息之前(或超时之前)将一直阻塞。

异步非阻塞方式(监听器onMessage())

订阅者或接收者通过MessageConsumer的setMessageListener(MessageListener listener)注册一个消息监听器,当消息到达之后,系统会自动调用监听器MessageListener的onMessage(Message message)方法。

同步阻塞方式(receive())

订阅者或接收者调用MessageConsumer的receive方法来接受消息,receive方法在能够接收到这个消息之前,将一直阻塞。


while(true){
    // 这里是 TextMessage 是因为消息发送者是 TextMessage , 接受处理的
    // 也应该是这个类型的消息
		//receive()方法 带参receive(4000L)超时4秒就会走
    TextMessage message = (TextMessage)messageConsumer.receive();
    if (null != message){
        System.out.println("****消费者的消息:"+message.getText());
    }else {
        break;
    }
}

异步监听式消费者

//通过监听的方式来消费消息
//通过异步非阻塞的方式类消费消息
//通过messageConsumer的setMessageListener注册一个监听器
//当有消息发送来时,系统自动调用MessageListener的onMessage方法来处理消息
consumer.setMessageListener(new MessageListener() {
    public void onMessage(Message message) {
        if (message != null&&message instanceof TextMessage) {
            TextMessage textMessage = (TextMessage)message;
            try {
                System.out.println("***消费者的消息:"+textMessage.getText());
            } catch (JMSException e) {
                e.printStackTrace();
            }
        }
    }
});
//保证控制台不关闭,阻止程序关闭
System.in.read();
//关闭资源
consumer.close();
session.close();
connection.close();
posted @ 2020-08-11 13:08  柒丶月  阅读(560)  评论(0编辑  收藏  举报