第十天:RabbitMQ工作模式

RabbitMQ支持的消息模式:

引入依赖:

<dependency>

        <groupId>com.rabbitmq</groupId>

        <artifactId>amqp-client</artifactId>

</dependency>

工具类包装:

第一种:基本模型(直连)

 P:生产者,发送消息的程序

C:消费者,消息的接受者,等待消息的到来,消费消息

queue(红色部分):消息队列。类似于邮箱,可以缓存消息,生产者投递消息,消费者获取消息。

开发生产者:

 开发消费者:

结果(生产者):

打印(消费者):

第二种:工作队列模型(work quene)

        work quene:任务模型。当消息处理比较耗时时,可能生产消息的速度会远远大于消费的速度,造成消息堆积。可以使用多个消费者绑定到一个队列,共同消费。

P:生产者,发送消息的程序

C1:消费者,消息的接受者,等待消息的到来,消费消息

C2:消费者,消息的接受者,等待消息的到来,消费消息

生产者:

 消费者1:

消费者2:

结果(生产者):

打印(消费者1)

        默认情况下,rabbitMQ会按顺序将每个消息发送给消费者,平均而言每个消费者都会收到相同数量的消息,这种分发消息的方式为循环。

消息自动确认机制:

        当开启消息自动确认机制后,消费者会从队列中拿到所有消息。但如果消费者因为某些问题在处理消息过程中突然宕机,则可能会造成消息的丢失。希望处理消息过程中,某个消费者宕机了,可以将未完成的消息交给其他消费者处理,避免消息丢失

        为了避免消息丢失,RabbitMQ支持消息确认。消费者发送回确认,以告知RabbitMQ已经接收,处理了特定的消息,并且RabbitMQ可以自由删除它。

        如果消费者因为某些原因宕机(通道关闭,连接关闭,TCP连接丢失),而无需发送ack,RabbitMQ将 了解消息未完全处理,并对其重新排队。如果同时有其他消费者在线,它将很快重新分发给其他消费者。

能者多劳:处理消息能力好的消费者处理更多任务,处理能力差的分发较少任务

实现:

        1.关闭消息自动确认

        2.设置同一时刻服务器只发送一条消息给同一消费者

        3.开启消息的手动确认

第三种:发布/订阅模型之fanout(发布/订阅模式)

fanout:广播模式;

消息发送流程:

        可以有多个消费者

        每个消费者有自己的队列

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

        生产者发送消息只能发送到交换机上

        交换机来决定给哪个队列,而生产者无法决定

        交换机把消息发送给绑定过的所有队列

        队列里的消费者都能拿到消息(实现一条消息被多个消费者消费)

生产者:

消费者:

         RabbitMQ消息模型的核心思想(core idea): 生产者会把消息发送给RabbitMQ的交换中心(Exchange),Exchange的一侧是生产者,另一侧则是一个或多个队列,由Exchange决定一条消息的生命周期–发送给某些队列,或者直接丢弃掉。

第四种:发布/订阅模型之routing(路由模式)

routing:发布/订阅模型-直连。

要求:

        队列与交换机绑定,不能任意绑定,而需要指定一个路由key

        生产者向交换机发送消息时,必须指定消息的路由key

P:生产者向交换机发送时会指定一个路由key

X:接收生产者消息,把消息传递给与路由key匹配的队列

C1:消费者,其所在的队列指定了需要路由key 为error的消息

C2:消费者,其所在的队列指定了需要路由key 为info的消息

生产者:

 消费者:

 第五种:发布/订阅模型之topics(主题模式)

topics(主题模式):topics类型交换机可以让队列绑定在路由key的时候使用通配符。

 通配符:

        *:只匹配一个词

        #:匹配零个、一个或多个词

生产者:

 消费者:

猜你喜欢

转载自blog.csdn.net/qq_35056891/article/details/127173439