RabbitMQ概念及知识点

  1. 使用场景

    • 异步处理
    • 应用解耦
    • 流量控制(削峰)
  2. 工作流程

    • 生产者连接RabbitMQ,建立TCP连接( Connection),开启信道(Channel)
    • 生产者声明一个Exchange(交换器),并设置相关属性,比如交换器类型、是否持久化等
    • 生产者声明一个队列井设置相关属性,比如是否排他、是否持久化、是否自动删除等
    • 生产者通过 bindingKey (绑定Key)将交换器和队列绑定( binding )起来
    • 生产者发送消息至RabbitMQ Broker,其中包含 routingKey (路由键)、交换器等信息
    • 相应的交换器根据接收到的 routingKey 查找相匹配的队列。
    • 如果找到,则将从生产者发送过来的消息存入相应的队列中。
    • 如果没有找到,则根据生产者配置的属性选择丢弃还是回退给生产者
    • 关闭信道。
    • 关闭连接。
  3. 用docker创建实例

    docker run -d --name rabbitmq --publish 5671:5671 \
    --publish 5672:5672 --publish 4369:4369 --publish 25672:25672 --publish 15671:15671 --publish 15672:15672 \
    rabbitmq:management
    
    4369,25672 -- erlang发现和集群端口
    5672,5671 --AMQP端口
    15672 -- 管理界面ui端口
    
    
  4. 接听注解

    • @RabbitListener:类+方法上(监听哪些队列)
    • @RabbitHandler:标在方法上(重载区分不同的消息)
  5. 消息确认机制-----可靠抵达

    • 想要保证消息不丢失,可靠抵达,可以使用事务消息,但是性能下降250倍。为此引入确认机制
    • 生产者–>Broker:confirmCallback:确认模式
    • Exchange–>Queue:returnCallback:未投递到queue退回模式
    • Queue–>消费者:ack机制
  6. RabbitMQ延时队列(实现定时任务)

    • 场景:未付款的订单,超过一定时间后,系统自动取消订单并释放占有物品
    • 常用解决方案:spring的schedule定时任务轮询数据库
    • 缺点:消耗系统内存,增加了数据库的压力,存在较大的时间误差
    • 解决方法:rabbitMQ的消息TTL和死信Exchange结合
  7. 延时队列的实现1(给队列里面设置消息的过期时间等信息)

    • 生产者发送消息时先指定路由键,并将消息发送给Exchange交换机
    • 交换机会按照路由键把消息交给一个队列
    • 这个队列设置有消息的TTL(消息存活时间),一个死信路由键和一个死信交换机,这个死信交换机绑定了一个新的路由
    • 当消息过了存活时间之后,队列就会带着死信路由键把消息发送给这死信交换机绑定的路由
    • 路由收到信息后会按照死信路由键找到一个队列
    • 监听该队列的消费者收到信息,实现了延时队列
  8. 延时队列的实现1(直接给消息设置过期时间)

    • 生产者发送消息,给消息单独设置一个过期时间
    • 消息经过交换机,被交给延时队列
    • 后面跟上一种实现一样
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值