rabbitmq简介

模型基本对象

        rabbitmq模型的基本对象有四种,分别是:producer、exchange、queue、consumer。

        这里介绍下exchange。rabbitmq消息模型的核心思想是:生产者不会直接把消息发送给队列,队列和消息直接是通过媒介来进行接触的,这个媒介就是exchange。excahnge。exchange知道如何处理消息,并把消息发送给队列。rabbitmq把消息的分发逻辑独立了出来,使得生产者和队列更加独立单纯,界限更加清晰。exchange总共有四种,分别为direct、topic、headers和fanout。


客户端表现

        在rabbitmq的客户端,使用channel在操作队列,所以要优先获取channel对象。

        一般情况下,客户端的步骤如下:

  • 创建连接池对象。
  • 设置连接参数,并获取一个连接。
  • 从连接中获取channel作为操作对类的对象。
  • 创建queue或者exchange。
  • 如果为生产者,则发送消息;如果为消费者,则设置处理消息逻辑,并等待消息。
  • 如果为生产者,需要手动关闭channel和连接。

几种队列

  • 基本队列模型
        一个最基本的队列原型如下图,队列在生产者产生消息时指定,消费者直接从这个队列中获取消息。

        图片中没有exchange,但是根据exchange的介绍,rabbitmq的模型应该都是有exchange的,这里应该是对模型做了简化。



  • 发布者-订阅者模型
        下图是最简单的发布者-订阅者模型:



  • 路由队列



  • 主题队列

        主题是路由的加强版



如何确保消息不丢失

        rabbitmq使用了两种机制来保证消息不丢失,分别是消息确认机制和持久化,如下:

  • 消息确认

        消息确认机制主要为了防止消费者出现故障导致的消息丢失,如消费者接收消息后发生处理异常的情况。使用消息确认前,先要设置消费者不是主动消息确认(autoAck=false),并在每次处理完消息后手动调用消息确认方法,通知rabbitmq此条消息处理完毕,rabbitmq就会把这条消息从队列中删除。

        假如消费者线程终止,但是未发送ack,又会怎么样呢?rabbitmq会有两种处理机制,如果当时有其他消费者存在,则把这条消息分发给他;如果没有其他消费者存在,则这条消息会重新进入队列进行排队。这样的处理还是比较灵活的。

  •  持久化

        rabbitmq中的消息是保存在内存中的,所以消息丢失后无法还原的情况下,最好把消息持久化保存下来。当然持久化必然会消耗一定的性能,是否需要持久化要看具体业务情况。持久化需要对队列和消息共同做持久化标记,另外只能对新队列做持久化标记,已经存在的队列不能再进行持久化了,这点要注意。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值