RabbitMq讲解

核心基础组件

  • 1、生产者:用于产生、发送消息的程序
  • 2、消费者:用于监听、接受、消费消息的程序
  • 3、消息:实际传输的数据,消息是通过二进制流进行传输
  • 4、队列:消息的暂存区和储存区
  • 5、交换机:同样也可以看作是消息的中转站点,用于首次接收和分发消息,其中包括Headers、 Fanout、Direct和Topic这4种
  • 6、路由:相当于密钥、地址或者“第三者”,一般不单独使用,而是与交换机绑定在一起,将消息路由到指定的队列

 

使用场景:

  • 1、服务解耦
  • 2、异步通讯
  • 3、接口限流:前端的请求并不是直接到达后端,而是进入队列排队执行,先进先出
  • 4、超时业务和数据延迟处理
  • 5、消息异步分发:异步执行业务,通过短信、邮件等通知告知用户结果

消息模型

  • 1、HeadersExchange
  • 2、FanoutExchange --具有"广播消息"的作用(无需路由)
    • 一个交换机可以对应并绑定多个队列,从而对应多个消费者
    •  

  • 3、DirectExchange --直连传输消息 (必须要绑定路由)
    • 一个交换机对应多个路由,从而对应多个队列
    •  

  • 4、TopicExchange --发布订阅模式
    • 与前面介绍的另外两种消息模型相比,最大的不同之处在于其支持“通配式”的路由,即可以通过为路由的名称指定特定的通配符""和"#",从而绑定到不同的队列中。其中,通配符""表示一个特定的“单词”,而通配符“#”则可以表示任意的单词(可以是一个,也可以是多个,也可以没有)
    • "*"相当于一个单词,"#"相当于0个或者多个单词
    •  

死信队列

  • 死信队列组成:
    • 1、DLX 死信交换机(必需)
    • 2、DLK 死信路由(必需)
    • 3、TTL 死信队列中消息的存活时间(非必需):TTL既可以设置成为死信队列的一部分,也可以在消息中单独进行设置,当队列跟消息同时都设置了存活时间 TTL时,则消息的“最大生存时间”或者“存活时间”将取两者中较短的时间
  •  

  • 创建成功,RabbitMQ将严格要求其不再允许被修改,比如修改交换机、队列的持久化策略等属性都是不允许的(IDEA控制台将会在项目运行之后输出报错信息)
  • 如果将消息存活时间作为死信队列的组成成分,那么一旦死信队列创建成功将不可修改存活时间,只能删除重建死信队列或者在控制台修改属性配置

实际生产环境中产生的问题

  • 1、消息是否发送成功

    添加确认机制,在生产者发送完消息后进行"发送确认",当确认成功即代表消息发送成功

  • 2、服务宕机消息丢失

    在创建队列和交换机时设置其持久化参数为true,即durable参数为true,在生产者生产消息时设置持久化模式

  • 3、消息重复消费

    rabbitmq提供消息确认机制(ACK),分别为:NONE(无需确认)、AUTO(自动确认)、MANUAL(手动确认)

    • NONE:生产者将消息发送至队列,消费者监听到该消息时,无须发送任何反馈信息给RabbitMQ服务器
    •  

    • AUTO:指的是“自动确认”机制,即生产者将消息发送至队列,消费者监听到该消息时,需要发送一个 AUTO ACK的反馈信息给RabbitMQ服务器,之后该消息将在 RabbitMQ的队列中被移除
    •  

    • MANUAL:它是一种“人为手动确认消费”机制,即生产者将消息发送至队列,消费者监听到该消息时需要手动地“以代码的形式”发送一个ACK的反馈信息给RabbitMQ服务器,之后该消息将在RabbitMQ的队列中被移除,同时告知生产者,消息已经成功发送并且已经成功被消费者监听消费了
    •  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值