iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >rabbitmq中routingkey的作用是什么
  • 281
分享到

rabbitmq中routingkey的作用是什么

2023-06-15 10:06:45 281人浏览 独家记忆
摘要

这篇文章主要为大家展示了“RabbitMQ中routingkey的作用是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“rabbitMQ中routingkey的作用是什么”这篇文章吧。对于消息

这篇文章主要为大家展示了“RabbitMQ中routingkey的作用是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“rabbitMQ中routingkey的作用是什么”这篇文章吧。

对于消息发布者而言它只负责把消息发布出去,甚至它也不知道消息是发到哪个queue,消息通过exchange到达queue,exchange的职责非常简单,就是一边接收发布者的消息一边把这些消息推到queue中。

而exchange是怎么知道消息应该推到哪个queue呢,这就要通过绑定queue与exchange时的routingkey了,通过代码进行绑定并且指定routingkey,下面有一张关系图,p(发布者) —> x(exchange) bindding(绑定关系也就是我们的routingkey) 红色代表着queue

rabbitmq中routingkey的作用是什么

我们来看代码:

在消息的生产者端:

@Componentpublic class RabbitOrderSender {    //自动注入RabbitTemplate模板类    @Autowired    private RabbitTemplate rabbitTemplate;    @Autowired    private BrokerMessageLogMapper brokerMessageLogMapper;    //回调函数: confirm确认    final RabbitTemplate.ConfirmCallback confirmCallback = new RabbitTemplate.ConfirmCallback() {        @Override        public void confirm(CorrelationData correlationData, boolean ack, String cause) {            System.err.println("correlationData: " + correlationData);            String messageId = correlationData.getId();            if(ack){                //如果confirm返回成功 则进行更新                brokerMessageLogMapper.changeBrokerMessageLogStatus(messageId, Constants.ORDER_SEND_SUCCESS, new Date());            } else {                //失败则进行具体的后续操作:重试 或者补偿等手段                System.err.println("异常处理...");            }        }    };    //发送消息方法调用: 构建自定义对象消息    public void sendOrder(Order order) throws Exception {        // 通过实现 ConfirmCallback 接口,消息发送到 Broker 后触发回调,确认消息是否到达 Broker 服务器,也就是只确认是否正确到达 Exchange 中        rabbitTemplate.setConfirmCallback(confirmCallback);        //消息唯一ID        CorrelationData correlationData = new CorrelationData(order.getMessageId());        rabbitTemplate.convertAndSend("order-exchange", "order.ABC", order, correlationData);    }}

利用rabbitTemplate(import org.springframework.amqp.rabbit.core.RabbitTemplate;需要在pom.xml中导入amqp的依赖)的convertAndSend方法就可以发送,这里order-exchange为交换机exchange,order.ABC为routingKey,并没有指定对应消息需要发往哪个队列,还有指定消息回调。

在消息的消费者端:

@Componentpublic class OrderReceiver {    //配置监听的哪一个队列,同时在没有queue和exchange的情况下会去创建并建立绑定关系    @RabbitListener(bindings = @QueueBinding(            value = @Queue(value = "order-queue",durable = "true"),            exchange = @Exchange(name="order-exchange",durable = "true",type = "topic"),            key = "order.*"        )    )    @RabbitHandler//如果有消息过来,在消费的时候调用这个方法    public void onOrderMessage(@Payload Order order, @Headers Map<String,Object> headers, Channel channel) throws IOException {        //消费者操作        System.out.println("---------收到消息,开始消费---------");        System.out.println("订单ID:"+order.getId());                Long deliveryTag = (Long) headers.get(AmqpHeaders.DELIVERY_TAG);                boolean multiple = false;        //ACK,确认一条消息已经被消费。不然的话,在rabbitmq首页会有Unacked显示为未处理数1.        channel.basicAck(deliveryTag,multiple);    }}

消费者需要指定监听的队列,routingkey,和exchage,如果在localhost:15672的rabbitmq的首页没有手动创建,@RabbitListener会自动帮我们创建的并绑定关系。rabbitmq的routingkey还可以用来过滤从队列中取的的信息。

对 rabbitmq 基本理解(exchange queue binding-key routing-key)

一 exchange queue binding-key routing-key概念及相互间的关系

queue :存储消息的队列,可以指定name来唯一确定

exchange:交换机(常用有三种),用于接收生产者发来的消息,并通过binding-key 与 routing-key 的匹配关系来决定将消息分发到指定queue

  2.1 Direct(路由模式):完全匹配 > 当消息的routing-key 与 exchange和queue间的binding-key完全匹配时,将消息分发到该queue

  2.2 Fanout (订阅模式):与binding-key和routing-key无关,将接受到的消息分发给有绑定关系的所有队列(不论binding-key和routing-key是什么)

  2.3 Topic (通配符模式):用消息的routing-key 与 exchange和queue间的binding-key 进行模式匹配,当满足规则时,分发到满足规则的所有队列

二 exchange queue binding-key routing-key的创建与使用

1. Fanout

ConnectionFactory connectionFactory = new ConnectionFactory();// 获取到tcp连接Connection connection = connectionFactory.newConnection(); //从tcp连接中创建通道 Channel channel = connection.createChannel();/ 声明exchangechannel.exchangeDeclare(EXCHANGE_NAME, "fanout");// 声明队列channel.queueDeclare(QUEUE_NAME, false, false, false, null);channel.queueDeclare(QUEUE_NAME2, false, false, false, null);// 绑定队列到交换机channel.queueBind(QUEUE_NAME, EXCHANGE_NAME, "");// 绑定队列到交换机 - aaa 是路由键3名称(其实这里无作用)channel.queueBind(QUEUE_NAME2, EXCHANGE_NAME, "aaa");

这样就创建好队列和交换机并且将它们绑定好了,只要交换机EXCHANGE_NAME收到消息就会分发给队列1和2

// 消息内容String message = "qqqqqqqq";channel.basicPublish(EXCHANGE_NAME, "aaa", null, message.getBytes()); // 这里路由键aaa有没有都一样,可以写任何值

2.不显式声明交换机时并且发送消息不指定交换机

则默认使用Direct,并且声明队列时,不显式绑定队列与交换机,则队列以队列名为routing-key绑定到默认的direct交换机,发送消息不指定交换机时,则将消息发到默认的direct交换机

以上是“rabbitmq中routingkey的作用是什么”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: rabbitmq中routingkey的作用是什么

本文链接: https://www.lsjlt.com/news/279445.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • rabbitmq中routingkey的作用是什么
    这篇文章主要为大家展示了“rabbitmq中routingkey的作用是什么”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“rabbitmq中routingkey的作用是什么”这篇文章吧。对于消息...
    99+
    2023-06-15
  • rabbitmq中routingkey的作用说明
    对于消息发布者而言它只负责把消息发布出去,甚至它也不知道消息是发到哪个queue,消息通过exchange到达queue,exchange的职责非常简单,就是一边接收发布者的消息一边...
    99+
    2024-04-02
  • RabbitMQ的工作原理是什么
    这篇文章给大家介绍RabbitMQ的工作原理是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。RabbitMQ简介在介绍RabbitMQ之前实现要介绍一下MQ,MQ是什么?MQ全称是Message Queue,可以理...
    99+
    2023-06-19
  • 【RabbitMQ】什么是RabbitMQ?RabbitMQ有什么用?应用场景有那些?
    目录 一、什么是RabbitMQ? 二、RabbitMQ是干什么的? 三、RabbitMQ的常见作用有那些? 四、RabbitMQ的应用场景有那些? 场景一:用户订单,库存处理。【服务间解耦】 场景二:用户注册,发送手机短信,邮件。【实现异...
    99+
    2023-08-31
    rabbitmq java 中间件 MQ
  • python操作RabbitMq的三种工作模式是什么
    这篇“python操作RabbitMq的三种工作模式是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“python操作Ra...
    99+
    2023-06-30
  • RabbitMQ使用场景是什么
    这篇文章主要介绍“RabbitMQ使用场景是什么”,在日常操作中,相信很多人在RabbitMQ使用场景是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”RabbitMQ使用场景是什么”的疑惑有所帮助!接下来...
    99+
    2023-06-26
  • rabbitmq同步调用的方法是什么
    RabbitMQ是一个消息中间件,它主要用于在不同的应用程序之间传递消息。它支持异步消息传递,但不直接支持同步调用。然而,可以使用一...
    99+
    2023-10-26
    rabbitmq
  • java中RabbitMQ消息队列指的是什么
    这篇文章主要介绍了java中RabbitMQ消息队列指的是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、说明RabbitMQ是用Erlang实现的一个高并发高可靠AM...
    99+
    2023-06-15
  • RabbitMQ安装的方法是什么
    本篇内容介绍了“RabbitMQ安装的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Rabbit...
    99+
    2024-04-02
  • python中 =的作用是什么
    本篇文章为大家展示了python中 =的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python有哪些常用库python常用的库:1.requesuts;2.scrapy;3.pillo...
    99+
    2023-06-14
  • python中“+=”的作用是什么
    本篇内容介绍了“python中“+=”的作用是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在python中,“+=”是指“加赋值”运算...
    99+
    2023-07-04
  • python中%的作用是什么
    python中%的作用是什么?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;...
    99+
    2023-06-14
  • python中 -=的作用是什么
    本篇文章为大家展示了python中 -=的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端开发,众多大型网...
    99+
    2023-06-14
  • jquery中$的作用是什么
    这篇文章主要介绍“jquery中$的作用是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“jquery中$的作用是什么”文章能帮助大家解决问题。作用有:1、作为jQuery包装器,利用选择器来选择...
    99+
    2023-07-05
  • python中的作用是什么
    这期内容当中小编将会给大家带来有关python中的作用是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;...
    99+
    2023-06-14
  • Prometheus中的TSDB是什么,它的作用是什么
    Prometheus中的TSDB是时间序列数据库(Time Series Database)的缩写,它是用来存储和管理时间序列数据的...
    99+
    2024-03-04
    Prometheus
  • Kafka中的ISR是什么它的作用是什么
    Kafka中的ISR指的是In-Sync Replicas,即同步副本。ISR是指与分区领导者保持同步的副本,它们会及时地复制分区的...
    99+
    2024-04-02
  • docker安装rabbitmq的步骤是什么
    要在Docker中安装RabbitMQ,可以按照以下步骤进行操作: 首先,确保你已经安装好Docker。 打开终端或命令提示...
    99+
    2023-10-25
    docker rabbitmq
  • redis和rabbitmq区别是什么
    这篇文章主要介绍redis和rabbitmq区别是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!           ...
    99+
    2024-04-02
  • css中中“>”的作用是什么
    本篇文章给大家分享的是有关css中中“>”的作用是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。css中的“>”是指子代元素,是CSS3特有的选择器,“父元素&...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作