什么是发布/订阅模型(Pub/Sub)?ActiveMQ如何实现它?

发布/订阅模型(Pub/Sub)是一种消息通信模型,特点是:

  1. 消息生产者发送消息到主题。
  2. 消息消费者订阅主题,消费主题中的消息。
  3. 同一个消息可以被多个消费者消费。

ActiveMQ 中使用 Topic 来实现发布/订阅模型,示例代码如下:
生产者:

ConnectionFactory factory = new ActiveMQConnectionFactory(url);  
Connection connection = factory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

// 创建 Topic  
Topic topic = session.createTopic("myTopic"); 

// 消息生产者  
MessageProducer producer = session.createProducer(topic);
producer.send(session.createTextMessage("Hello"));

消费者1:

ConnectionFactory factory = new ActiveMQConnectionFactory(url);  
Connection connection = factory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

// 消息消费者1
Topic topic = session.createTopic("myTopic");
MessageConsumer consumer = session.createConsumer(topic);  

// 消息消费
Message message = consumer.receive();  

消费者2:

// 和消费者1的代码相同,订阅相同主题

在发布/订阅模型中:

  1. 消息生产者发送消息到 Topic。
  2. 多个消费者可以订阅同一个 Topic。
  3. 消息会被所有订阅的消费者消费。

发布/订阅模型实现了一对多的消息通信,常用于群发通知、新闻推送等场景。