您的位置:首页 > 其它

关于使用MQ系统解耦的一点思考

2017-11-09 00:00 567 查看
MQ使用场景非常多如异步消息处理、系统解耦、数据同步、流量削峰等,经常在一些博文看到这些词语,就拿系统解耦来说,如用户下单后需要通知库存系统进行扣减库存,通知物流系统进行发货,推荐搜索系统等,这些都是和业务息息相关的,所以不允许出现某个系统接收不到消息的情况,而好多博客、文章并没有说明存在这种情况,如果读者不了解就很容易拿到线上的生产环境,不出问题还好,等出现问题那就是大问题。

我们公司使用的是activeMq,而activeMq默认的topic模式,只是发消息给正在订阅的消费者,如果消费者挂了那就收不到消息了,所以需要设置activeMq的topic为持久订阅模式。

方法如下:

一、生产者需要设置消息为持久模式

//通过session 创建producer
MessageProducer producer = session.createProducer(null);
//设置producer的投递模式为持久模式
producer.setDeliveryMode(DeliveryMode.PERSISTENT);

二、设置客户端的clientID,相同的clientID会认为是一个客户端,后连接的会报错

// 创建connection
connection = connectionFactory.createConnection();
connection.setClientID("bbb"); //持久订阅需要设置这个。
connection.start();

// 创建session
Session session = connection.createSession(false,Session.AUTO_ACKNOWLEDGE);

// 创建destination
Topic topic = session.createTopic("userSyncTopic"); //Topic名称

MessageConsumer consumer = session.createDurableSubscriber(topic,"bbb"); //持久订阅
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ActiveMQ