接上文 RabbitMQ-主题模式
1 第四种交换机类型
header:它是根据头部信息来决定的,在我们发送的消息中是可以携带一些头部信息的,类似与HTTP,我们可以根据这些头部信息来决定路由到哪一个消息队列中。
修改配置类内容
@Configuration
public class RabbitConfiguration {
@Bean("headerExchange") //注意这里返回的是HeadersExchange
public HeadersExchange exchange(){
return ExchangeBuilder
.headersExchange("amq.headers") //RabbitMQ为我们预置了两个,这里用第一个就行
.build();
}
@Bean("yydsQueue")
public Queue queue(){
return QueueBuilder.nonDurable("yyds").build();
}
@Bean("binding")
public Binding binding2(@Qualifier("headerExchange") HeadersExchange exchange, //这里和上面一样的类型
@Qualifier("yydsQueue") Queue queue){
return BindingBuilder
.bind(queue)
.to(exchange) //使用HeadersExchange的to方法,可以进行进一步配置
//.whereAny("a", "b").exist(); 这个是只要存在任意一个指定的头部Key就行
//.whereAll("a", "b").exist(); 这个是必须存在所有指定的的头部Key
.where("test").matches("hello"); //比如我们现在需要消息的头部信息中包含test,并且值为hello才能转发给我们的消息队列
//.whereAny(Collections.singletonMap("test", "hello")).match(); 传入Map也行,批量指定键值对
}
}
启动服务,进入到yyds队列详情,可以看到多了一个test:hello
尝试发送信息