实现步骤:
- 交换器将消息路由到多个队列。
- 每个队列都只绑定一个消费者,即可实现发布/订阅模式。
实现代码:
@Component
public class TopicConfig{
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@Autowired
private AmqpTemplate rabbitTemplate;
public void send1(String msg) {
logger.info("send:{}", msg);
rabbitTemplate.convertAndSend("topicExchange", "topic.message", msg);
}
public void send2(String msg) {
logger.info("send:{}", msg);
rabbitTemplate.convertAndSend("topicExchange", "topic.messages", msg);
}
}
消费者:(每个消费者都只对应一个队列)
@Component
@RabbitListener(queues = "topic.message")
public class TopicReceive1 {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@RabbitHandler
public void process(String message) {
logger.info("Topic Receiver2 :{}", message);
}
}
@Component
@RabbitListener(queues = "topic.message")
public class TopicReceive {
private final Logger logger = LoggerFactory.getLogger(this.getClass());
@RabbitHandler
public void process(String message) {
logger.info("Topic Receiver1 :{}", message);
}
}