Rabbitmq五种工作模式(一)

 

                                  Rabbitmq五种工作模式 

目录

 

                                  Rabbitmq五种工作模式 

一.简单模式

1.1简单模式的结构

1.生产端:

2.交换机:

3.消费者:

4.应用场景:

1.2代码实现

 1.引入依赖

2.编写一个类,实现第一个方法,创建连接工厂

3.生产端

4.消费端

总结:


 

一.简单模式

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(队列名称) 找到绑定队列发送消息,如果交换机找不到对应名称的队列,以垃圾数据处理,扔到垃圾桶 (负责给绑定队列发送消息,找不到就扔进垃圾桶)
  • 消息队列:负责接收生产端数据信息,返回消费端数据信息,(类似一个存储柜)
  • 消费端:一个消费者监听一个队列,从而实现消息一旦获取,一个消费者进行消费逻辑(负责接收消息)

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值