ExchangeスイッチとFanoutExchangeスイッチはどちらもキーを無視します。
彼はheadersパラメータに従って照合し、対応するメッセージキューにメッセージを送信します。
2つの一致ルールがあります
- Where Any-ヘッダー情報に少なくとも1つの一致があります
- すべての場合-ヘッダー情報は完全に一致する必要があります。
交換とキュー、およびバインディングを作成しましょう。
@Component
public class HeaderExchange {
@Bean
public Queue queue1(){
return new Queue("testHeaderQueue");
}
@Bean
public HeadersExchange createExchange(){
return new HeadersExchange("testHeaderExchange");
}
@Bean
public Binding bind1(){
HashMap<String, Object> header = new HashMap<>();
header.put("queue", "queue1");
header.put("bindType", "whereAll");
return BindingBuilder.bind(queue1()).to(createExchange()).whereAny(header).match();
}
}
次に、メッセージを送信します
@RequestMapping("send")
public String testHeaderExchange(String param){
MessageProperties messageProperties = new MessageProperties();
messageProperties.setContentType("text/plain");
messageProperties.setContentEncoding("utf-8");
messageProperties.setHeader("queue","queue1");
Message message = new Message(param.getBytes(), messageProperties);
rabbitTemplate.convertAndSend("testHeaderExchange",null,message);
return "发送成功";
}
次に、コンシューマーコードがあります
@Component
public class TestHeader {
@RabbitListener(queues = "testHeaderQueue")
public void rest(String mes, Message message, Channel channel){
Map<String, Object> headers = message.getMessageProperties().getHeaders();
for (Map.Entry<String, Object> stringObjectEntry : headers.entrySet()) {
System.out.println("key---->"+stringObjectEntry.getKey());
System.out.println("value---->"+stringObjectEntry.getValue());
}
System.out.println("接收到的消息"+mes);
try {
channel.basicAck(message.getMessageProperties().getDeliveryTag(),false);
} catch (IOException e) {
e.printStackTrace();
}
}
}
ここで正常に受信しました。
この記事を参照するこの記事