创建项目
配置
在测试类中测试
@Autowired
RabbitTemplate rabbitTemplate;
/**
* 点对点单播
*/
@Test
void contextLoads() {
Map<String,Object> map = new HashMap<>();
map.put("msg","这是第一个消息");
map.put("data", Arrays.asList("hello world",123,true));
rabbitTemplate.convertAndSend("exchange.direct","atguigu.news",map);
}
运行测试方法,查看队列,可以看到消息发送成功
接收数据,消息一旦接受则在消息队列中的该消息被删除
// 接受数据,接收数据后消息队列的数据被删除
@Test
public void receive(){
Object o = rabbitTemplate.receiveAndConvert("atguigu.news");//这个方法可以直接将消息转化为我们想要的对象
System.out.println(o.getClass());
System.out.println(o);
}
将数据以json的序列化规则存入消息队列
编写一个配置类
package com.atguigu.amqp.config;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyAMQPConfig {
@Bean
public MessageConverter messageConverter(){
return new Jackson2JsonMessageConverter();
}
}
Rabbit的自动配置类RabbitAutoConfiguration中,如果IOC容器有MessageConverter就是用容器中的MessageConverter
再次运行发送消息的方法,查看队列,消息在队列中就是以json数据保存的了
监听消息队列中的内容 @RabbitListener
开启基于注解的RabbitMQ
监听atguigu.news队列
@RabbitListener(queues = "atguigu.news")
public void receive(Book book){
System.out.println("atguigu.news收到消息:"+book);
}
发送消息
rabbitTemplate.convertAndSend("exchange.fanout","",new Book("红楼梦","曹雪芹"));
控制台打印:
AmqpAdmin组件
@Autowired
AmqpAdmin amqpAdmin;
@Test
public void createExchange(){
// 1.创建DirectExchange对象
DirectExchange directExchange = new DirectExchange("amqpadmin.exchange");
// 2.在RabbitMQ中创建DirectExchange交换器
amqpAdmin.declareExchange(directExchange);
System.out.println("创建完成");
}
运行测试方法,查看交换器列表,可以看到成功创建出来了
Exchange的分类
创建队列:
amqpAdmin.declareQueue(new Queue("amqpadmin.queue",true));
创建绑定规则:
amqpAdmin.declareBinding(new Binding("amqpadmin.queue", Binding.DestinationType.QUEUE, "amqpadmin.exchange","amqp.haha",null));
其中Binding