ActiveMQ中观察者模式:基于事件的发布/订阅

在ActiveMQ中,观察者模式用于实现基于事件的发布/订阅功能。

具体来说:

ActiveMQ提供了两种模式

  • 点对点模式(Queue):生产者发送消息给一个特定的消费者。
  • 发布/订阅模式(Topic):生产者发布消息,多个消费者订阅并接收。

发布/订阅模式

发布/订阅模式就体现了观察者模式:

  • Publisher(发布者): 生产者,负责发布消息事件
  • Subscriber(订阅者): 消费者,订阅感兴趣的事件并相应。
  • Message(事件): 被发布的消息。
  • Topic(主题): 发布者和订阅者之间的中间人,把消息事件路由给所有跟主题相关的订阅者。

在ActiveMQ中,发布者是:

JMSContext context = ..; 
Topic topic = context.createTopic("stock");

context.createProducer().send(topic, "AAPL 127");

订阅者是:

context.createConsumer(topic).listen(msg -> {
   // ... 处理消息
});

由ActiveMQ的Topic来连接发布者和订阅者。

发布一个消息,所有订阅该Topic的消费者都能接收。所以ActiveMQ中的Topic实际上实现了观察者模式,将发布者和订阅者解耦。订阅者不依赖于具体的发布者,发布者也不关心有哪些订阅者。而Topic作为中间人,将消息路由给所有订阅者。