RabbitMQ之工作模式

支持消息模式

引入依赖:

<dependency>
    <groupId>com.rabbitmq</groupId>
    <artifactId>amqp-client</artifactId>
</dependency>

工具类包装:

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

 

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

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

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

开发生产者:

开发消费者:

 结果(生产者):

打印(消费者):

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

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

 

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

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

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

生产者:

消费者1:

消费者2:

 结果(生产者):

 打印(消费者1):

 打印(消费者2):

 默认情况下,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的时候使用通配符。

通配符:

        *:只匹配一个词

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

生产者:

 

 消费者:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值