首页 > 其他 > 详细

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

时间:2020-08-11 14:31:40      阅读:92      评论:0      收藏:0      [点我收藏+]

同步阻塞方式(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();

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

原文:https://www.cnblogs.com/qiuwenli/p/13474969.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!