rabbitMq(1.工作模式)

RabbitMq学习小结

一:工作模式

1.简单模式

一个消息队列一个发送者一个消费者

2.Work模式

A: 轮询分发Round-Robin(轮询)

  特点:一次性分发任务,每个消费者获得的任务是等量的。

   优点:可以轻易的并行工作,如果任务过多可以通过增加消费者来处理任务,系统的伸缩性更容易。

   缺点:每个消费者的任务数量是相等的,如果存在每个任务的工作量不一致,就会出现有的消费者一直处于繁忙状态,有的消费者处于闲置状态,因为在分发任务的时候,并不了解这些,有消息进来,rabbitmq只会根据消息数量公平分发,不会看消费者的应答情况。

B: 公平分发

  特点:任务是一个一个的派发,消费者处理完了给出响应才会继续派发下一个任务。

   优点:有效的解决的轮询分发中工作量不均等的问题,可以确保每个消费者的工作量相等。

   缺点:当消费者出现问题的时候,会出现消息积压的情况。

代码说明:

生产者:

// 同一时刻服务器只会发一条消息给消费者

    channel.basicQos(1);

消费者:

// 同一时刻服务器只会发一条消息给消费者

channel.basicQos(1);

// 监听队列,false表示手动返回完成状态,true表示自动

channel.basicConsume(WORK_QUEUE_NAME, false, consumer);

// 返回确认状态,注释掉表示使用自动确认模式            channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);

   

/*声明队列  

          * 参数1:队列名称 

          * 参数2:设置是否持久化。为 true 则设置队列为持久化。持久化的队列会存盘,在 服务器重启的时候可以保证不丢失相关信息。

          * 参数3:设置是否排他。为 true 则设置队列为排他的。如果一个队列被声明为排 他队列,该队列仅对首次声明它的连接可见,并在连接断开时自动删除。这里需要注意 三点:排他队列是基于连接( Connection) 可见的,同 个连接的不同信道 (Channel) 是可以同时访问同一连接创建的排他队列; "首次"是指如果 个连接己经声明了 排他队列,其他连接是不允许建立同名的排他队列的,这个与普通队列不同:即使该队 列是持久化的,一旦连接关闭或者客户端退出,该排他队列都会被自动删除,这种队列 适用于一个客户端同时发送和读取消息的应用场景。

          *   参数4:设置是否自动删除。为 true 则设置队列为自动删除。如果一直没有消费者连接这个队列,不会自动删除;如果有消费者连接这个队列,当所有消费者都断开连接的时候,会自动删除。(当队列的消息没有被消费时,不会删除;当消息消费了,且消费者都断开了,会自动删除)

          * 参数5:设置队列的其他一些参数,如 x-rnessage-ttl 、x-expires 、x-rnax-length 、x-rnax-length-bytes、 x-dead-letter-exchange、 x-deadletter-routing-key 、 x-rnax-priority 等。

          */

        channel.queueDeclare(WORK_QUEUE_NAME, false, false, false, null);

/*参数1:交换机名称

             *参数2:队列名称,路由关键字

             *参数3:消息路由头等的其他属性

             *参数4:消息内容

             */

            channel.basicPublish("", WORK_QUEUE_NAME, null, message.getBytes());

 

 

3. 消息的确认模式

模式1:自动确认

只要消息从队列中获取,无论消费者获取到消息后是否成功消息,都认为是消息已经成功消费。

 

模式2:手动确认

                   消费者从队列中获取消息后,服务器会将该消息标记为不可用状态,等待消费者的反馈,如果消费者一直没有反馈,那么该消息将一直处于不可用状态。

 

    图1:消费者只消费没有反馈消息状态

图2:消费者只消费没有返回状态,然后断开连接

图3:消费者消费且确认状态

 

4.订阅模式(fanout)

 

1.解析:

a、1个生产者,多个消费者

b、每一个消费者都有自己的一个队列

c、生产者没有将消息直接发送到队列,而是发送到了交换机

d、每个队列都要绑定到交换机

e、生产者发送的消息,经过交换机,到达队列,实现,一个消息被多个消费者获取的目的

2.注意:

a.一个消费者队列可以有多个消费者实例,只有其中一个消费者实例会消费

       b. 消息发送到没有队列绑定的交换机时,消息将丢失,因为,交换机没有存储消息的能力,消息只能存在在队列中。

测试结果:

    同一个消息被多个队列获取。一个消费者队列可以有多个消费者实例,只有其中一个消费者实例会消费到消息。

3.代码

   a.生产者

        

b.消费者

4.特点分析

    a.一个生产者,多个消费者

5.路由模式(direct)

1.解析:

    a:生产者向交换机发送消息,并给指定消息的key

b:消息者根据业务场景,绑定对应的消息key

c:一个队列可以绑定多个消息key

d:交换机如果没有队列与其绑定,消息将会丢失

e:交换机有队列与其绑定,但是没有消费者,消息不会丢失

2.特点分析:

       a:一个消息只能由一个消费者消费

3.代码

       生产者:

      

    消费者:

   

 

6.主题模式(通配符模式)

   

1.解析:

    1. 主题模式与路由模式相似,都是根据消息key来消费消息
    2. 主题模式的两个符合

①*(星号)仅代表一个单词
②#(井号)代表任意个单词

举例:update.* 可以获取到生产者发出的key为  update.1   update.2 等消息

          Update.# 可以获取到生产者发出的key为  update.1  update.1.1.1.1  等消息

2.特点分析:

    1. 可以定义一类消息,将key灵活运用

3.代码

生产者:

消费者:

 

参考链接:https://blog.csdn.net/hellozpc/article/details/81436980

RabbitMQ是一种开源的消息中间件,用于在分布式系统中进行消息传输。RabbitMQ3.10.18是RabbitMQ一个版本。以下是关于RabbitMQ3.10.18的一些重要特点和功能。 首先,RabbitMQ3.10.18具有高可用性和可扩展性。它通过支持多个节点集群,实现了对消息队列的水平扩展,以满足不断增长的消息传输需求。这使得RabbitMQ能够处理大量的消息,并确保系统的可用性。 其次,RabbitMQ3.10.18提供了可靠性的消息传输。它使用持久化存储,确保即使在消息传输过程中发生故障或断电时,消息也能被保存下来,并在系统恢复后重新发送。这有助于保持消息传递的完整性和可靠性。 此外,RabbitMQ3.10.18支持各种消息通信模式。它可以支持点对点的消息传递,也可以支持发布/订阅模式,允许多个消费者订阅同一个主题并接收相同的消息。这使得RabbitMQ非常灵活,适用于各种不同的应用场景和需求。 除此之外,RabbitMQ3.10.18还提供了丰富的插件和扩展功能。通过安装不同的插件,可以将RabbitMQ与其他系统和中间件进行集成,如数据库、日志系统等。这为系统的开发和集成提供了更多的选择和灵活性。 总结来说,RabbitMQ3.10.18是一个强大而灵活的消息中间件,具有高可用性、可靠性和可扩展性。它可以满足各种不同应用场景下的消息传输需求,并提供了丰富的插件和扩展功能,为系统的开发和集成提供了更多的可能性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值