ActiveMQ 中可以通过 Topic 和 Queue 实现消息的广播和单播:
1、 消息广播:
- 发送消息到 Topic,所有订阅该 Topic 的消费者都能收到消息。
- 示例代码:
ConnectionFactory cf = new ActiveMQConnectionFactory("tcp://broker:61616");
Connection connection = cf.createConnection();
connection.start();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Topic topic = session.createTopic("topic1");
MessageProducer producer = session.createProducer(topic);
TextMessage msg = session.createTextMessage("Hello");
producer.send(msg); // 发送到Topic,消息广播
MessageConsumer consumer1 = session.createConsumer(topic);
MessageConsumer consumer2 = session.createConsumer(topic);
consumer1 和 consumer2 都能收到发送到 topic1 的消息。
2、 消息单播:
- 发送消息到 Queue,只有一个消费者能收到消息。
- 如果有多个消费者,ActiveMQ 会根据消费者名称或设置的消费者优先级决定将消息发送给哪个消费者。
- 示例代码:
Queue queue = session.createQueue("queue1");
MessageProducer producer = session.createProducer(queue);
TextMessage msg = session.createTextMessage("Hello");
producer.send(msg); // 发送到Queue,消息单播
MessageConsumer consumer1 = session.createConsumer(queue);
MessageConsumer consumer2 = session.createConsumer(queue);
只有 consumer1 或 consumer2 能收到发送到 queue1 的消息,实现单播。