RabbitMQ整合
使用dockers下载带management的版本,该版本是带web界面的,可操作性比较强
启动
第二个-p是web界面的访问地址
客户端进行访问:
账号密码均是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); }
用于rabbitTemplate.send(exchage,routKey,message);
运行在web界面进行查看结果!!!
此时这个队列已经接收到消息
2.2、接受消息
接受之后消息信道的消息就会消失!!!
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; } }
接收到信息
此时是可以拿到数据以及类型,此时可以做强转!!!!
3.广播
//广播 @Test public void sengMsg(){ rabbitTemplate.convertAndSend("exchange.fanout","",new Book("三国",32)); }
此时的routKey可以不写,因为是广播
此时查看队列
所有的信道都会收到消息!!!