• rabbitmq简记


    使用rabbitmq发送消息时需要指定交换机和路由键,接收消息时指定队列名,交换机和队列之间通过路由键建立绑定关系

    默认交换机

    默认交换机(default exchange)实际上是一个由消息代理预先声明好的没有名字(名字为空字符串)的直连交换机(direct exchange)。它有一个特殊的属性使得它对于简单应用特别有用处:那就是每个新建队列(queue)都会自动绑定到默认交换机上,绑定的路由键(routing key)名称与队列名称相同。若发布消息时指定交换机为空(""),则该消息会给默认交换机处理。

    直连交换机

    直连型交换机(direct exchange)是根据消息携带的路由键(routing key)将消息投递给对应队列的。直连交换机用来处理消息的单播路由(unicast routing)(尽管它也可以处理多播路由)。下边介绍它是如何工作的:

    • 将一个队列绑定到某个交换机上,同时赋予该绑定一个路由键(routing key)
    • 当一个携带着路由键为R的消息被发送给直连交换机时,交换机会把它路由给绑定值同样为R的队列。

    比如有个直连交换机叫e1,一个队列q1,将q1以路由键k1绑定到e1后,当有消息以k1为路由键发送到e1时,e1会把这个消息投递到q1这个队列

    扇型交换机

    扇型交换机(funout exchange)将消息路由给绑定到它身上的所有队列,而不理会绑定的路由键。如果N个队列绑定到某个扇型交换机上,当有消息发送给此扇型交换机时,交换机会将消息的拷贝分别发送给这所有的N个队列。扇型用来交换机处理消息的广播路由(broadcast routing)。扇形交换机会忽略路由键,在进行相关操作时可指定路由键为空。

    主题交换机

    主题交换机(topic exchanges)通过对消息的路由键和队列到交换机的绑定模式之间的匹配,将消息路由给一个或多个队列。主题交换机经常用来实现各种分发/订阅模式及其变种。主题交换机通常用来实现消息的多播路由(multicast routing)。topic exchanges是direct exchange的通配符模式,比如有个主题交换机叫e1,队列q1绑定到e1的路由键为*.apple,队列q2绑定到e1的路由键为*.orange,当有消息以aa.apple为路由键发送给e1时,这条消息将投递给q1,q2则收不到该消息

    头交换机

    有时消息的路由操作会涉及到多个属性,此时使用消息头就比用路由键更容易表达,头交换机(headers exchange)就是为此而生的。头交换机使用多个消息属性来代替路由键建立路由规则。通过判断消息头的值能否与指定的绑定相匹配来确立路由规则。

    消息确认

    rabbitmq消息确认分为自动和手动确认,自动确认即消费者取走消息后mq就会删除该消息,手动确认是消费者主动调用消息确认接口后mq才删除消息,如果一个消费者在尚未发送确认回执的情况下挂掉了,那AMQP代理会将消息重新投递给另一个消费者。如果当时没有可用的消费者了,消息代理会死等下一个注册到此队列的消费者,然后再次尝试投递。

    延迟消息

    rabbitmq通过设置消息的存活时间(ttl)实现延迟消息,当消息超过延迟时间未被消费,将被发送给指定的交换机(死信交换机),死信交换机根据指定的路由键将消息投递到某个队列(死信队列),可借此实现订单超时处理,由于rabbitmq只监听队列中第一个消息的过期时间,当后面的消息比前面的消息先过期时,会导致后面过期的消息无法及时转到死信交换机,可借助rabbitmq延迟插件来避免这个问题,延迟插件的原理是把消息拦截在交换机,等消息到期了再投递给队列

  • 相关阅读:
    常用测试用例设计方法之正交实验法详解
    【TypeScript】中的函数详解
    pringBoot的全局异常处理汇总
    超详细的Pycharm.2023下载与安装教程
    2023 年最后一波工具安利「GitHub 热点速览」
    C++设计模式之模板方法Template Method
    忙碌生活下的技术适应力:应对新应用学习带来的困扰与挑战
    C++判断当前程序是否运行在Windows展台(Kiosk)模式下
    Flex & bison 学习好代码
    Springboot + Elasticjob-lite 3.x + Elasticjob-lite-UI可视化
  • 原文地址:https://blog.csdn.net/kankan231/article/details/126365289