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