關於使用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"); //持久訂閱
相關文章
相關標籤/搜索