ActiveMQ 支持的主要消息处理模式有:
- 点对点(Queue):一个消息只能被一个消费者消费。
- 发布-订阅(Topic):一个消息可以被多个消费者消费。
- 接收者选择(Selector):消费者可以根据消息的属性选择接收消息。
- 接收者抢占(Exclusive Consumer):一个队列只能被一个消费者消费。
- 优先级队列(Priority Queue):根据消息的优先级顺序消费消息。
- 死信队列(DLQ):不能被正常消费的消息被发送到死信队列。
- 延迟队列:消息在指定时间后被投递到目标队列。
使用方式:
- 点对点:
// 生产者
Queue queue = session.createQueue("queue");
MessageProducer producer = session.createProducer(queue);
producer.send(message);
// 消费者
Queue queue = session.createQueue("queue");
MessageConsumer consumer = session.createConsumer(queue);
Message msg = consumer.receive();
- 发布-订阅:
// 生产者
Topic topic = session.createTopic("topic");
MessageProducer producer = session.createProducer(topic);
producer.send(message);
// 消费者1
Topic topic = session.createTopic("topic");
MessageConsumer consumer1 = session.createConsumer(topic);
// 消费者2
Topic topic = session.createTopic("topic");
MessageConsumer consumer2 = session.createConsumer(topic);
- 接收者选择:
// 消费者
String selector = "age > 30";
Queue queue = session.createQueue("queue");
MessageConsumer consumer = session.createConsumer(queue, selector);
- 接收者抢占:
// 必须设置为独占
queue.setExclusive(true);
// 消费者
MessageConsumer consumer = session.createConsumer(queue);
consumer.setExclusive(true);
- 优先级队列:消息必须设置优先级
- 死信队列:在 DestinationPolicy 中配置
- 延迟队列:使用 DelayQueue 实现
ActiveMQ 通过丰富的消息处理模式可以满足各种复杂的应用场景。我们可以根据实际需要选择适当的模式进行消息处理。