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

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

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"); //持久订阅

转载于:https://my.oschina.net/u/1455335/blog/1570245

你可能感兴趣的:(关于使用MQ系统解耦的一点思考)