springAmq中动态设置消息的内容
在学习springAmq时网上有很多将发消息的方法说的都很浅显
大部分将发消息的方法都是下面这种
amqpAdmin.declareExchange(new DirectExchange("testExchange"));
amqpAdmin.declareQueue(new Queue("testQueue", true));
amqpAdmin.declareBinding(new Binding("testQueue", Binding.DestinationType.QUEUE, "testExchange", "testQueue", new HashMap<>()));
// 简单的发送消息
template.convertAndSend("testQueue", "我是发送的消息");
像这种简单的使用rabbitTemplate.convertAndSend发送消息,然后通过接收消息的时候也只是简单的接收到发送的消息
@RabbitListener(queues = "testQueue")
public void listen(String str){
System.out.println(str);
}
但是这样就很容易让人忽略掉对消息的本体的操作
下面发送的message消息,可以更加丰富的设置和使用消息帧的数学,就比如这里向消息头帧中插入数据
@Bean
public ApplicationRunner runner(){
amqpAdmin.declareExchange(new DirectExchange("testExchange"));
amqpAdmin.declareQueue(new Queue("testQueue", true));
amqpAdmin.declareBinding(new Binding("testQueue", Binding.DestinationType.QUEUE, "testExchange", "testQueue", new HashMap<>()));
Message message = new Message("123".getBytes());
// 可以更加丰富的设置和使用消息帧的数学,就比如这里向消息头帧中插入数据
message.getMessageProperties().getHeaders().put("key", "123456");
template.send("testQueue", message);
return args -> {};
}
这里是接收部分可以看到其实接收的时候rabbitmq会将Message 和你发送得消息都穿给你注意:无论是使用send(Queue, Message )的方式发送还是使用template.convertAndSend(Queue, object)的方式发送,rabbitmq都会将Message 传给消费者,网上很多文章都没有写Message 这个参数
@RabbitListener(queues = "testQueue")
public void listen(Message msg, String str){
System.out.println(msg.getMessageProperties().getHeaders());
System.out.println(str);
}
下面是运行的结果