接上文 RabbitMQ-发布订阅模式和路由模式
1 主题模式
#通配符 代表0个或多个。*通配符 代表 1个或多个
进行测试,修改配置文件
@Configuration
public class RabbitConfiguration {
@Bean("topicExchange") //这里使用预置的Topic类型交换机
public Exchange exchange(){
return ExchangeBuilder.topicExchange("amq.topic").build();
}
@Bean("yydsQueue")
public Queue queue(){
return QueueBuilder.nonDurable("yyds").build();
}
@Bean("binding")
public Binding binding2(@Qualifier("topicExchange") Exchange exchange,
@Qualifier("yydsQueue") Queue queue){
return BindingBuilder
.bind(queue)
.to(exchange)
.with("*.test.*")
.noargs();
}
}
去掉yyds1,yyds2的绑定关系
启动服务,进入yyds队列详情
进入交换机详情发送消息
除了默认主题交换机,还有叫做
amq.rabbitmq.trace
的交换机,它也是topic类型的。用来帮助我们记录和追踪生产者和消费者使用消息队列的交换机,它是一个内部交换机。
使用amq.rabbitmq.trace交换机:
首先创建一个消息队列用于接收记录
由于是使用docker安装的rabbitmq,需要先通过docker命令进入容器内部:
docker exec -it <容器id> /bin/bash
docker exec -it fa7e07e3ae6366a86a6e5310db56c2414c5dff7795cfeb2c5f22c2c5c39ec5e1 /bin/bash
然后再控制台将虚拟主机/test的追踪功能开启:
rabbitmqctl trace_on -p /test
开启后将队列trace
绑定到 amq.rabbitmq.trace
交换机上
由于发送到此交换机上的 routingkey 为routing key为 publish.交换机名称 和 deliver,队列名称,分别对应生产者投递到交换机的消息,和消费者从队列上获取的消息,因此这里使用 # 通配符进行绑定。
进行测试,通过amq.topic向yyds队列发送消息
发送之后查看trace队列的消息,发现两条消息
取出trace的消息:通过追踪,可以得知消息发送的交换机、routingKey、用户等信息。包括信息本身。
同样的,消费者在取出数据也有就记录。