首先是环境搭建问题,按下面图片所示进行勾选模块:
然后配置一下消息中间件的服务ip以及账号密码:
applicationContext.properties:
spring.rabbitmq.host=192.168.31.53
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
环境一切都准备好了!!
下面开始测试,本文用 rabbitTemplate来说明问题。
@Autowired
RabbitTemplate rabbitTemplate;
@Test
void sent() {//发送消息
//message需要自己构建,定义消息体内容和消息头
// rabbitTemplate.send(exchange,routekey,message);
//object默认当成消息体,只需要传入要发送的对象,自动序列化发送给rabbitmq
// rabbitTemplate.convertAndSend(exchange,routekey,object);
Map<String,Object> map = new HashMap<>();
map.put("msg","这是一个消息");
map.put("data", Arrays.asList("hello",123,true));
//对象被默认序列化之后发送出去
rabbitTemplate.convertAndSend("exchange.direct","lzl.news",map);
}
执行了上面的方法,发现队列lzl.news可以接收到消息,但是消息的内容是我们看不懂的二进制码:
想要转化成我们能看懂的json字符串形式,只需要将下面的bean加入容器:
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
再次执行sent方法,这次发现lzl.news队列中已经收到了我们期待的json数据:
至于接受方法,无论队列存储的二进制格式或者是json,他都会原样(发送什么就接收什么)的就收:
@Test
public void receive(){
Object o = rabbitTemplate.receiveAndConvert("lzl.news");
System.out.println(o.getClass());
System.out.println(o);
}
执行的结果如下:
如何创建队列,转化器,以及绑定规则:
@Autowired
AmqpAdmin amqpAdmin;
@Test
public void createExchange(){
//创建交换器
amqpAdmin.declareExchange(new DirectExchange("amqpadmin.exchange"));
System.out.println("交换器创建完成!");
//创建队列
amqpAdmin.declareQueue(new Queue("amqpadmin.queue",true));//ture代表使用持久化
System.out.println("队列创建完毕!");
//实现绑定规则
amqpAdmin.declareBinding(new Binding("amqpadmin.queue",Binding.DestinationType.QUEUE,"amqpadmin.exchange","amqp.haha",null));
System.out.println("绑定规则指定完毕!");
}