测试发送Object类型消息
在SpringAMQP的发送方法中,接收消息的类型是Object,也就是说我们可以发送任意对象类型的消息,SpringAMQP会帮我们序列化为字节后发送。
consumer中利用@Bean声明一个队列
@Bean public Queue objectQueue(){ return new Queue("object.queue"); }
只注册队列,方便查看消息内容,因为RabbitMQ遵循阅后即焚,消息不被消费,就不会被消除。
启动consumer服务,查看RabbitMQ Management,Queue队列是不是有object.queue队列
publisher服务中编辑测试
发送消息到object.queue队列
@Test public void testSendMap() throws InterruptedException { String queueName = "object.queue"; Map<String, String> message = new HashMap<>(); message.put("name", "zhangsan"); message.put("age", 25); rabbitTemplate.convertAndSend(queueName, "china.news", message); }
查看RabbitMQ Management,object.queue队列是否有消息
查看消息内容
Spring的对消息对象的处理是由org.springframework.amqp.support.converter.MessageConverter来处理的。而默认使用SimpleMessageConverter消息转换器,基于JDK的ObjectOutputStream完成序列化。
设置消息转换器
只需要定义一个MessageConverter 类型的Bean即可。推荐用JSON方式序列化
添加JSON依赖
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>
publisher服务
定义MessageConverter
@Bean public MessageConverter messageConverter(){ return new Jackson2JsonMessageConverter(); }
consumer服务
定义MessageConverter
@Bean public MessageConverter messageConverter(){ return new Jackson2JsonMessageConverter(); }
注意:消息发送方与接收方必须使用相同的MessageConverter消息转换器
定义一个消费者
监听object.queue队列并消费消息
@RabbitListener(queues = "object.queue") public void listenObjectQueueMessage(Map<String,Object> msg) throws InterruptedException { System.out.println("ObjectQueue :【" + msg + "】"); }