RabbitMQ整合
使用dockers下载带management的版本,该版本是带web界面的,可操作性比较强
第二个-p是web界面的访问端口

启动rabbitmq
客户端进行访问rabbirmq管理界面:
账号密码均是guest
登录后的首页
看图进行设置:
1、添加exchange(交换器):
全部添加之后
2、添加队列
3、绑定
........
4、发送消息
........
再队列中查看消息
工程中进行整合
新建工程:
1、自动配置的类
1.1、---有自动配置了连接工厂
1.2、---基本的 配置类
封装了RabbitMq的所有配置
自动配置的配置类
1.3、---RabbitTemplate 给RabbitMq发送和接受消息
1.4---AmqpAdmin 系统管理功能组件
1.5---![]()
消息
需要将消息序列化成数组
2.测试单播
2.1、发送消息
@Autowired RabbitTemplate rabbitTemplate; //单播(点对点) @Test public void contextLoads() { //message需要自己定义,定义消息体和消息头 //rabbitTemplate.send(exchage,routKey,message); //默认当成消息体,只需要将传入要发送的对象,自动序列化发送给rabbitmq //rabbitTemplate.convertAndSend(xchage,routKey,message); Map<String,Object> map = new HashMap<>(); map.put("msg","这是IDEA整合的测试"); //对象默认序列化以后发送 rabbitTemplate.convertAndSend("exchange.direct", "atguigu.news",map); }
在web界面查看结果!!!
此时这个队列已经接收到消息
2.2、接受消息
/** * 测试获取消息 */ @Test public void getMsg(){ Object o = rabbitTemplate.receiveAndConvert("atguigu.news"); System.out.println(o.getClass()); System.out.println(o); }
接受之后消息信道的消息就会消失!!!
2.3、如何以json的方式进行显示
可以自己写一个自定义的
新建一个配置类
@Configuration public class MyAMQPConfig { @Bean public MessageConverter messageConverter(){ return new Jackson2JsonMessageConverter(); } }
再次进行测试
此时过去的就是json数据类型
此时也可以进行消息的接受消息
也可以进行反序列化
测试对象:
public class Book { private String name; private int price; public Book() { } public Book(String name, int price) { this.name = name; this.price = price; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPrice() { return price; } public void setPrice(int price) { this.price = price; } }
测试
@Test public void testObject(){ //测试配置以json格式序列化后发送对象 Book book = new Book("西游记",100); rabbitTemplate.convertAndSend("exchange.direct","atguigu.news",book); }
接受消息
3.测试广播
/** * 测试广播 */ @Test public void testFanout(){ rabbitTemplate.convertAndSend("exchange.fanout","",new Book("三国",32)); }
此时的routKey可以不写,因为是广播
此时查看队列
所有的信道都会收到消息!!!