MQ使用場景很是多如異步消息處理、系統解耦、數據同步、流量削峯等,常常在一些博文看到這些詞語,就拿系統解耦來講,如用戶下單後須要通知庫存系統進行扣減庫存,通知物流系統進行發貨,推薦搜索系統等,這些都是和業務息息相關的,因此不容許出現某個系統接收不到消息的狀況,而好多博客、文章並無說明存在這種狀況,若是讀者不瞭解就很容易拿到線上的生產環境,不出問題還好,等出現問題那就是大問題。java
咱們公司使用的是activeMq,而activeMq默認的topic模式,只是發消息給正在訂閱的消費者,若是消費者掛了那就收不到消息了,因此須要設置activeMq的topic爲持久訂閱模式。session
//經過session 建立producer MessageProducer producer = session.createProducer(null); //設置producer的投遞模式爲持久模式 producer.setDeliveryMode(DeliveryMode.PERSISTENT);
// 建立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"); //持久訂閱