当前位置:首页 > 科技  > 软件

RabbitMQ的四种交换机详解

来源: 责编: 时间:2023-11-06 08:53:38 424观看
导读 交换机主要是接收消息并且转发到绑定的队列,交换机不存储消息,在启用ack模式后,交换机找不到队列会返回错误。交换机有四种类型:Direct, topic, Headers and Fanout。图片一、topic exchange----(模糊匹配) 按规则

  交换机主要是接收消息并且转发到绑定的队列,交换机不存储消息,在启用ack模式后,交换机找不到队列会返回错误。交换机有四种类型:Direct, topic, Headers and Fanout。ANY28资讯网——每日最新资讯28at.com

图片图片ANY28资讯网——每日最新资讯28at.com

一、topic exchange----(模糊匹配) 

    按规则转发消息(最灵活),转发消息主要是根据通配符。在这种交换机下,队列和交换机的绑定会定义一种路由模式,那么,通配符就要在这种路由模式和路由键之间匹配后交换机才能转发消息。ANY28资讯网——每日最新资讯28at.com

    1、 路由键(routingKey):必须是字符,用句号.隔开:例如:"order.a";(一般有发布者定义);ANY28资讯网——每日最新资讯28at.com

    2、路由模式:必须包含一个 星号(*),主要用于匹配路由键指定位置的一个单词, #就表示相当于一个或者多个单词。(例如:order.*.*.*….)(一般由接收者提供),但是也可通过rabbitmq客户端配置。常用在队列Queues定义中。ANY28资讯网——每日最新资讯28at.com

    direct类型要求routingkey完全相等,但是topic exchange可以有通配符:“*”:表示匹配一个单词, “#”:则表示匹配没有或者多个单词。优势:可实现批量订阅消费。(Routingkey与Queues之间支持模糊匹配)。ANY28资讯网——每日最新资讯28at.com

图片图片ANY28资讯网——每日最新资讯28at.com

案例:ANY28资讯网——每日最新资讯28at.com

/**     * 功能描述:通过消费端注解绑定的方式发送Topic交换机中     * @MethodName: sendTopicMessageByZJ     * @MethodParam: [messageData]     * @Return: void     * @Author: yyalin     * @CreateDate: 2022/4/9 18:17     */    public void sendTopicMessageByZJ(String messageData){        CorrelationData correlationData = new CorrelationData("1");        rabbitTemplate.convertAndSend("topicExchange",                "china.car",messageData,correlationData);    }

ANY28资讯网——每日最新资讯28at.com

二、direct exchange----默认的(全文匹配)

    direct 类型的行为是"先匹配, 再投送". 即:在绑定时设定一个 routingkey, 消息的routingkey 匹配时, 才会被交换器投送到绑定的队列中。是RabbitMQ默认的交换机模式,也是最简单的模式,根据key全文匹配去寻找队列。(按照routingkey分发到指定队列)ANY28资讯网——每日最新资讯28at.com

    所有发送到direct exchange的消息被转发到routingkey中指定到queue。ANY28资讯网——每日最新资讯28at.com

注意:direct模式可使用rabbitmq自带的exchange:AMQP default,所以不需将exchange进行任何绑定操作(binding),消息传递时,routingkey必须完全匹配才会被对列接收,否则该消息会被抛弃。(Routingkey与Queues之间必须全文匹配)。ANY28资讯网——每日最新资讯28at.com

图片图片ANY28资讯网——每日最新资讯28at.com

    在direct类型的exchange中,只有routingkey完全相同,exchange才会选择对应的binging进行消息路由。ANY28资讯网——每日最新资讯28at.com

案例:ANY28资讯网——每日最新资讯28at.com

/**     * 功能描述:通过消费端注解绑定的方式发送Direct交换机中     * @MethodName: sendDirectMessageByZJ     * @MethodParam: [messageData]     * @Return: void     * @Author: yyalin     * @CreateDate: 2022/4/9 18:17     */    public void sendDirectMessageByZJ(String messageData){        CorrelationData correlationData = new CorrelationData("1");        rabbitTemplate.convertAndSend("directExchange",                "blue",messageData,correlationData);    }

ANY28资讯网——每日最新资讯28at.com

三、headers Exchange----(自定义匹配规则)

    设置header attribute参数类型的交换机,相较于 direct 和 topic 固定地使用 routing_key , headers 则是一个自定义匹配规则的类型. 在队列与交换器绑定时, 会设定一组键值对规则, 消息中也包括一组键值对( headers 属性), 当这些键值对有一对, 或全部匹配时, 消息被投送到对应队列.ANY28资讯网——每日最新资讯28at.com

四、fanout Exchange----(消息广播模式)

    转发消息到所有绑定队列,消息广播的模式,不管路由键或者是路由模式,会把消息发给绑定给它的全部队列,如果配置了routing_key会被忽略。(直接将消息路由到所有绑定的队列中,无须对消息的routingkey进行匹配操作)。ANY28资讯网——每日最新资讯28at.com

图片图片ANY28资讯网——每日最新资讯28at.com

案例:ANY28资讯网——每日最新资讯28at.com

/**     * 功能描述:发送FanoutMessage消息     * @MethodName: sendFanoutMessage     * @MethodParam: [messageData]     * @Return: void     * @Author: yyalin     * @CreateDate: 2022/4/9 17:46     */    public void sendFanoutMessage(String messageData){        CorrelationData correlationData = new CorrelationData("1");        rabbitTemplate.convertAndSend("fanoutExchange",                "",messageData,correlationData);    }

五、总结

     一般direct和topic用来具体的路由消费,若要用广播的消息一般用fanout的exchange,header类型比较少。ANY28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-17168-0.htmlRabbitMQ的四种交换机详解

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: C++中线程编程的应用,注意点,源代码解析

下一篇: 如何使用图算法,帮助我们理解和处理复杂的关系型数据

标签:
  • 热门焦点
  • 5月iOS设备好评榜:iPhone 14仅排第43?

    来到新的一月,安兔兔的各个榜单又重新汇总了数据,像安卓阵营的榜单都有着比较大的变动,不过iOS由于设备的更新换代并没有那么快,所以相对来说变化并不大,特别是iOS好评榜,老款设
  • SpringBoot中使用Cache提升接口性能详解

    环境:springboot2.3.12.RELEASE + JSR107 + Ehcache + JPASpring 框架从 3.1 开始,对 Spring 应用程序提供了透明式添加缓存的支持。和事务支持一样,抽象缓存允许一致地使用各
  • 如何使用JavaScript创建一只图像放大镜?

    译者 | 布加迪审校 | 重楼如果您曾经浏览过购物网站,可能遇到过图像放大功能。它可以让您放大图像的特定区域,以便浏览。结合这个小小的重要功能可以大大改善您网站的用户体验
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • 梁柱接棒两年,腾讯音乐闯出新路子

    文丨田静 出品丨牛刀财经(niudaocaijing)7月5日,企鹅FM发布官方公告称由于业务调整,将于9月6日正式停止运营,这意味着腾讯音乐长音频业务走向消亡。腾讯在长音频领域还在摸索。为
  • 新电商三兄弟,“抖快红”成团!

    来源:价值研究所作 者:Hernanderz 随着内容电商的概念兴起,抖音、快手、小红书组成的“新电商三兄弟”成为业内一股不可忽视的势力,给阿里、京东、拼多多带去了巨大压
  • 网红炒股不为了赚钱,那就是耍流氓!

    来源:首席商业评论6月26日高调宣布入市,网络名嘴大v胡锡进居然进军了股市。在一次财经媒体峰会上,几个财经圈媒体大佬就“胡锡进炒股是否知道认真报道”展开讨论。有
  • OPPO Reno10 Pro英雄联盟定制礼盒公布:萨勒芬妮同款配色梦幻十足

    5月24日,OPPO推出了全新的OPPO Reno 10系列,包含OPPO Reno10、OPPO Reno10 Pro和OPPO Reno10 Pro+三款新机,全系标配了超光影长焦镜头,是迄今为止拍照
  • Windows 11发布,微软一改往常对老机型开放的态度

    距离 Windows 11 发布已经过去一周,在过去一周里,很多数码爱好者围绕其对 Android 应用的支持、对老机型的升级问题展开了激烈讨论。与以往不同的是,在这次大
Top