RasbbitMQ 路由器使用 绑定键 路由键 详解 路由器与队列绑定

RabbitMQ中,消息并非直接发送到队列,而是通过Exchange(交换器)进行路由。BindingKey是交换器与队列绑定的路径名称,RoutingKey则是生产者指定的消息路由标识。交换器类型包括direct、fanout和topic,它们有不同的匹配规则。路由过程涉及Exchange声明、队列绑定、消息发布等步骤,通过RoutingKey和BindingKey的匹配确定消息投递目标。
摘要由CSDN通过智能技术生成

交换器Exchange

我们之前讲述的是将消息投递到队列中再有消费者区消费,实际上RabbitM的运作流程不是这样的。真实情况是,生产者将消息发送到 Exchange (交换器:“X”),由交换器将消息路由到一个或者多个队列中,消费者再去消费消息。如果路由不到,或许会返回给生产者,或许直接丢弃(这个看具体配置后面会讲到:)。
在这里插入图片描述

首先明白两个概念:

  • BindingKey:绑定键,交换机都是需要与队列进行绑定,这里交换键可以简单的理解为交换器与队列之间的路径的名称(可以重复,即可以把多条队列以同一绑定键与路由器绑定)
  • RoutingKey:路由键,生产者发送消息的时候可以带上路由键发送给交换器,交换器就会根据路由键去匹配队列(路由键 与交换器的匹配)

再了解常用的三种交换器

  • direct:当消息中的RoutingKey(路由键)和交换器与队列之间的BindingKey(绑定键)完全匹配时,会发送消息给相应的队列
  • fanout:把当前路由器下所有消息发送到与该交换器绑定的队列中(不在意绑定键的有无与匹配)
  • topic :将消息路由到路由键与绑定键相匹配的队列中
    匹配规则:
    路由键一般:单词.单词.单词 构成.(单词为一个或者几个字母组成)
    采用"*“和”#",用于做模糊匹配,其中"#“用于匹配一个单词,”"用于匹配多个单词(0~n)个。
    举例说明:路由键:
    .kkk.*可以匹配绑定键:rrr.kkk.lll。路由键:#.jjj.# 可以匹配绑定键:xxx.mmm.kkk

RabbitMQ路由器运作流程

  1. 先声明一个路由器
    //第一个参数为路由器名字,第二个为路由器类型,第三个是否持久化,第四个设置是否自动删除,第五个携带参数
    channel.exchangeDeclare(EXCHANGE_NAME,“direct”,true,false,null);
  2. 生产者将路由器与队列绑定,再为绑定的路径赋值一个绑定键
    //第一参数为队列名,第二个参数为路由器,第三个参数为绑定键
    channel.queueBind(QUEUE_NAME,EXCHANGE_NAME,BINDING_KEY);
  3. 发送消息时指定路由,以及绑定路由键,携带参数,消息体
    channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, null, message.getBytes());
    生产者代码
    以下代码声明了一个路由器,并且声明了两个队列,将两个队列与路由器进行绑定,并且赋值了同一绑定键,最后向路由器中发送消息,携带路由键。这个时候路由器会将消息的路由键与路由器和队列绑定说产生的所有绑定键进行对比,会向匹配上的队列区投放消息,每个队列都会投放
public class Send {
   
    //队列名
    private final static String QUEUE_NAME = "wsd_test";
    //队
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值