在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作为中间人,将消息路由给所有订阅者。