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

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

咱们公司使用的是activeMq,而activeMq默认的topic模式,只是发消息给正在订阅的消费者,若是消费者挂了那就收不到消息了,因此须要设置activeMq的topic为持久订阅模式。session

方法以下:

1、生产者须要设置消息为持久模式

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

2、设置客户端的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"); //持久订阅
相关文章
相关标签/搜索