Rabbitmq五种工作模式
目录
一.简单模式
1.1简单模式的结构
1.生产端:
绑定rabbitmq默认交换机,交换机名称"",使用队列名称发送消息;
2.交换机:
初始化的rabbitmq中7个交换机的一员,不需要自定义创建,接收消息后根据消息中携带的路由key(队列名称) 找到绑定队列发送消息,如果交换机找不到对应名称的队列,以垃圾数据处理,扔到垃圾桶
3.消费者:
一个消费者监听一个队列,从而实现消息一旦获取,一个消费者进行消费逻辑
简单模式强调的不是交换机的种类,强调的是一发一接,queue缓存;
4.应用场景:
短信,qq,阿里旺旺
1.2代码实现
1.引入依赖
创建一个SpringBoot项目添加下面依赖即可
2.编写一个类,实现第一个方法,创建连接工厂
public Channel getChannel(){
//创建一个连接从长
ConnectionFactory factory=new ConnectionFactory();
//需要将连接属性信息,交给连接工厂使用,ip,port,user,password,virturHost
factory.setHost("云主机IP");
factory.setPort(5672);
factory.setUsername("guest");
factory.setPassword("guest");
factory.setVirtualHost("/");
try{
//从连接工厂获取长连接.
Connection conn = factory.newConnection();
//从长连接中获取信道对象
return conn.createChannel();
}catch(Exception e){
throw new RuntimeException(e.getMessage());}}
3.生产端
1.运行测试,看到连接
2.发送消息的生产端测试(拿到连接,就发送)
3.实现结果
有个脉冲信号,但是,没设置队列,也就是说会扔进垃圾堆中
4.消费端
/*实现消费端代码,while死循环不断监听队列状态是否有消息
*一旦发现消息,可以获取消息,封装消息对象,
*拿到消息的body数据,直接打印处理
*/
@Test
public void consumer01() throws Exception{
//channel的获取
Channel channel = getChannel();
//消息队列的声明,如果当前虚拟主机已经存在一个同名的队列,直接使用
//没有队列才会新建simple01
channel.queueDeclare("simple0112321312312312312312321", false, false, false, null);
/*queue:String类型数据,定义的队列名称simple01
*durable:Boolean类型,true表示当前队列可以持久化,一般配合消息的持久化props
*exclusive:Boolean类型,true表示专有,只有当前进程创建的连接可以使用队列,false,不会限制专有
*autoDelete:Boolean类型,true表示最后一个channel使用连接断开,自动删除,false不自动删除
*arguments:Map类型,可以创建队列是设定一些属性值 例如x-message-ttl定义消息在被删除前,可以在queue生存的时间
*/
//创建消费对象
QueueingConsumer consumer=new QueueingConsumer(channel);
//消费对象绑定到simple01队列
/*queue:绑定的队列名称
*callback:consumer对象
*/
channel.basicConsume("simple0112321312312312312312321", consumer);
//实现消费逻辑,从队列中解析消息封装对象
while(true){
//从队列中获取传递消息的传输对象delivery
//每出现一个消息,都会拿到delivery对象
Delivery deli = consumer.nextDelivery();
String msg=new String(deli.getBody());
System.out.println(msg);}}
总结:
- 生产端:负责发送消息,绑定交换机,可绑定默认的“ ”的交换机,(只管发消息)
- 交换机:接收消息后根据消息中携带的路由key(队列名称) 找到绑定队列发送消息,如果交换机找不到对应名称的队列,以垃圾数据处理,扔到垃圾桶 (负责给绑定队列发送消息,找不到就扔进垃圾桶)
- 消息队列:负责接收生产端数据信息,返回消费端数据信息,(类似一个存储柜)
- 消费端:一个消费者监听一个队列,从而实现消息一旦获取,一个消费者进行消费逻辑(负责接收消息)