RabbitMQ路由模式RoutingKey模式

RabbitMq中交换机(Exchange)、队列(Queue)和路由键(Routing Key) RabbitMQ 是一个消息代理系统,使用交换机(Exchange)、队列(Queue)和路由键(Routing Key)来管理消息的传递。它们分别起到不同的作用,构成了消息从生产者到消费者的传递路径。 阅读详情

RabbitMQ路由模式RoutingKey模式

生产者发送消息到交换机并指定一个路由key,消费者队列绑定到交换机时要制定路由key(key匹配就能接受消息,key不匹配就不能接受消息)

例如:我们可以把路由key设置为insert ,那么消费者队列key指定包含insert才可以接收消息,消费者队列key定义为update或者delete就不能接收消息。很好的控制了更新,插入和删除的操作。

         采用交换机direct模式

注: 

前面做的demo中RoutingKey设置的空

  

RoutingKey有值的时候,那么 经过消息队列之后,需要在经过 RoutingKey进行判断决定 消费者

 

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.toov5.rabibitMQScribe</groupId>
  <artifactId>rabibitMQScribe</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  
  <dependencies>
		<dependency>
			<groupId>com.rabbitmq</groupId>
			<artifactId>amqp-client</artifactId>
			<version>3.6.5</version>
		</dependency>
	</dependencies>
  
</project>

 producer

package com.toov5.routing;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.toov5.utils.MQConnectionUtils;

//生产者 交换机类型 producerFanout类型
public class RoutingProducer {
    //交换机名称
     private static final String EXCHANGE_NAME = "my_routing"; 
     public static void main(String[] args) throws IOException, TimeoutException {
        //建立MQ连接
         Connection connection = MQConnectionUtils.newConnection();
        //创建通道
          Channel channel = connection.createChannel();
          //生产者绑定交换机
          channel.exchangeDeclare(EXCHANGE_NAME, "direct");  //交换机名称  交换机类型
          String routingKey="email";
          //创建对应的消息 
          String msString = "my_Routing_destination_msg"+routingKey;
          //通过频道 发送消息
          System.out.println("生产者投递消息:"+msString);
          channel.basicPublish(EXCHANGE_NAME, routingKey, null, msString.getBytes());
          //关闭通道 和 连接
          channel.close();
          connection.close();
    }
    
} 

consumer:

package com.toov5.routing;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.AMQP.BasicProperties;
import com.toov5.utils.MQConnectionUtils;

//邮件消费者
public class ConsumerEmailRouting {
    private static final String EMAIL_QUEUE ="email_queue_routing";
    //交换机名称
   private static final String EXCHANGE_NAME = "my_routing"; 
     public static void main(String[] args) throws IOException, TimeoutException {
         System.out.println("邮件消费者启动");
        //建立MQ连接
         Connection connection = MQConnectionUtils.newConnection(); 
        //创建通道
          Channel channel = connection.createChannel();
          
        //消费者声明队列
          channel.queueDeclare(EMAIL_QUEUE, false, false, false, null);
         //消费者队列绑定 路由
          channel.queueBind(EMAIL_QUEUE, EXCHANGE_NAME, "email");
          //消费者监听消息
      DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
              //重写监听方法
             @Override
             public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
                     throws IOException {             
                 String msg = new String(body,"UTF-8");
                 System.out.println("邮件消费者获取生产者消息"+msg);
             }
         };
         channel.basicConsume(EMAIL_QUEUE,true, defaultConsumer);   //绑定队列 事件监听
            
    }
}
package com.toov5.routing;

import java.io.IOException;
import java.util.concurrent.TimeoutException;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.DefaultConsumer;
import com.rabbitmq.client.Envelope;
import com.rabbitmq.client.AMQP.BasicProperties;
import com.toov5.utils.MQConnectionUtils;

//邮件消费者
public class ConsumerSMSRouting {
    private static final String SMS_QUEUE ="sms_queue_routing";
    //交换机名称
   private static final String EXCHANGE_NAME = "my_routing"; 
     public static void main(String[] args) throws IOException, TimeoutException {
         System.out.println("短信消费者启动");
        //建立MQ连接
         Connection connection = MQConnectionUtils.newConnection(); 
        //创建通道
          Channel channel = connection.createChannel();
          
        //消费者声明队列
          channel.queueDeclare(SMS_QUEUE, false, false, false, null);
         //消费者队列绑定 路由
          channel.queueBind(SMS_QUEUE, EXCHANGE_NAME, "email");
         channel.queueBind(SMS_QUEUE, EXCHANGE_NAME, "sms");
          //消费者监听消息
      DefaultConsumer defaultConsumer = new DefaultConsumer(channel) {
              //重写监听方法
             @Override
             public void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)
                     throws IOException {             
                 String msg = new String(body,"UTF-8");
                 System.out.println("邮件消费者获取生产者消息"+msg);
             }
         };
         channel.basicConsume(SMS_QUEUE,true, defaultConsumer);   //绑定队列 事件监听
            
    }
}

 

运行结果:

绑定两个:

 

 

 

 

RabbitMQ六种通信模式介绍——路由模式(Routing) 文章目录一。简介二。代码实现三。程序运行效果 一。简介 本篇博客所讲的为RabbitMQ六种通信模式之一的路由模式。 模式说明 路由模式特点: 队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key) 消息的发送方在 向 Exchange发送消息时,也必须指定消息的 RoutingKey。 Exchange不再把消息交给每一个绑定的队列,而是根据消息的Routing Key进行判断,只有队列的Routingkey与消息的 Routing key完全一致,才会接收到消息 官 阅读详情

相关推荐

《RabbitMQ系列教程-第四章-04-RabbitMQ工作模式之Routing路由模式》_rabbitmq fanout routingkey

刚刚我们说的Pub/Sub订阅模式中介绍了ExchangeExchange有四种类型(directtopicheadersfanout),Pub/Sub订阅强调的是Fanout类型的Exchange,Routing模式则强调的是Exchange的direct模式,Routing模式也叫直连模式;Routing模式官网介绍:https://www.rabbitmq.com/tutorials/tutorial-four-java.html。

2401_84302583的博客 500

RabbitMQ中的Routing Key是什么?它的作用是什么?

接下来,我们声明了一个名为"my_exchange"的交换机,并设置交换机的类型为"direct",表示使用Routing Key进行消息路由。然后,我们声明了两个队列,分别是"my_queue_1"和"my_queue_2"。在RabbitMQ中,Exchange(交换机)负责接收来自生产者的消息,并根据Routing Key将消息路由到一个或多个队列中。方法将队列1绑定到交换机,并指定Routing Key为"key1",将队列2绑定到交换机,并指定Routing Key为"key2"。

jakelihua 7474

RabbitMQ的学习之路(二-4)模式详解之路由routing路由模式

​ 1.routing路由模式为生产者发送的消息主要根据定义的路由规则决定往哪个队列发送。 和发布订阅模式不同的是,队列绑定交换机时需要指定一个routingkey 队列与交换机的绑定,不能是任意绑定了,而是要指定一个RoutingKey(路由key) 消息的发送方在 向 Exchange发送消息时,也必须指定消息的 RoutingKey。 Exchange不再把消息交给每一个绑定的队列,而是根据消息的Routing Key进行判断,只有队列的Routingkey与消息的 Routing key.

馒头花卷儿 410

RabbitMQ概念详解

RabbitMQ概念详解一.AMQP协议1. AMQP协议简介2. 功能范围3. 技术术语二.RabbitMQ1. RabbitMQ基础概念2. Exchange消息调度策略1. Fanout (订阅模式|广播模式)2. Direct(路由模式)3.Topic (通配符模式)4. Headers(键值对模式)3.RPC4. 消息确认:Message acknowledgment5.消息持久化:Message durability6.分发机制①.轮询分发:Round-robin dispatching②.公平

licux的博客 2285

基于FreeSwitch与SIP UA的蓝牙电话坐席系统实战部署

本文详细介绍了如何基于FreeSwitch开源软交换平台,结合SIP UA软电话与蓝牙电话App,在局域网内搭建一套低成本、自主可控的电话坐席系统。文章提供了从环境准备、FreeSwitch安装配置、用户与拨号计划创建,到SIP软电话测试和蓝牙设备接入的完整实战部署流程,并给出了关键优化与排坑指南,适合小微团队或个人开发者构建内部通讯工具。

zeta9的博客 544

网络工程师的Python入门实战:手把手教你写交换机配置备份脚本

本文详细介绍了如何利用Python为网络工程师开发一个高效的交换机配置备份脚本,涵盖环境搭建、设备连接方案、智能设备发现、多因素认证、异常处理、配置差异对比等关键步骤。通过实战案例展示如何将备份时间从4小时缩短至15分钟,显著提升运维效率,特别适用于华为交换机等设备的配置导出与备份需求。

weixin_30291791的博客 304

rabbitmq-路由模式-routingkey

【README】 本文po出 rabbitmq路由模式; 【1】intro to 路由模式 特点1)队列与交换机的绑定,不能是任意绑定, 而是指定一个路由key-routingkey; 特点2)消息的发送方向在向 exchange-交换机发送消息时,也必须指定消息的routingkey; 特点3)exchange-交换机不再把消息发送给每一个绑定的队列,而是根据消息的routingkey发送到对应的队列; 与发布订阅模式不同,路由模式的交换机类型是 Direct,还有队列绑定交换机的时候需要指.

PacosonSWJTU的博客 1万+

同步整流buck电路图设计:手把手入门必看

从零开始拆解同步整流Buck电路图及其原理,手把手带你画出关键拓扑、选型MOSFET、分析续流路径。重点讲清占空比控制逻辑与体二极管导通损耗的规避方法,让buck电路图及其原理真正落地可调、稳定可靠。

weixin_33308579的博客 995

RabbitMQ系列(六)基本概念之Routing Key

消息路由的核心标识生产者发送消息时需指定,交换机根据此值和队列绑定的决定消息流向。类比:类似快递单上的“地址”,决定包裹应送往哪个区域。与交换机类型强关联的具体匹配规则由交换机类型决定。例如::精确匹配和。:支持通配符(匹配一个词,通配符,匹配多个词)进行模式匹配。:忽略,广播到所有绑定队列1。核心作用:通过规则匹配实现消息的精准或灵活路由。选择建议精确路由 → Direct Exchange多维度分类 → Topic Exchange广播 → Fanout Exchange。

yyueshen的专栏 2441

华为云CodeHub代码托管

什么是代码托管 代码托管(CodeHub)是面向软件开发者的基于Git的在线代码托管服务,是具备安全管控、成员/权限管理、分支保护/合并、在线编辑、统计服务等功能的云端代码仓库,旨在解决软件开发者在跨地域协同、多分支并发、代码版本管理、安全性等方面的问题。 代码托管具有以下特性 · 在线代码阅读、修改、提交,随时随地开发,不受地域限制。 · 在线分支管理,包含分支新建、切换、合并,实现多分支并行开发,效率高。 master分支:最为稳定,功能比较完整,随时可发布的代码。 develop分支:用于平时开

LUJINYUANA的博客 1万+

【软件逆向学习记录】x64dbg调试器入门2:主调试窗口功能及字符串搜索功能介绍

在x64dbg中, ​​CPU视图 是调试过程中最核心的界面,通常被称为​​主调试窗口​​或​​调试视图​​,总体分为四个区域,代码区(反汇编),数据区(内存窗口),寄存器区和堆栈区,详细位置如下图:示例数据代码区最左侧为内存地址,第二块区域为程序代码值,原始程序代码经编译和汇编后变为二进制机器码存储在计算机中,调试器将其展示为易于阅读的十六进制,第三块区域是机器码反汇编后的汇编代码,最右侧为代码的注释窗口,有一些原始的注释,也可以自己添加注释PS:汇编和反汇编解释。

tusikong的博客 2923

【RabbitMQ Learning Journey】路由模式RoutingKey

RabbitMQ学习资源来源于(蚂蚁课堂) 生产者发送消息到交换机并指定一个路由key,消费者队列绑定到交换机时要制定路由key(key匹配就能接受消息,key不匹配就不能接受消息) 例如:我们可以把路由key设置为insert ,那么消费者队列key指定包含insert才可以接收消息,消费者队列key定义为update或者delete就不能接收消息。很好的控制了更新,插入和删除的操作。 采...

开发学习工作日志 359

实验五 循环结构第1关:斐波那契数列第2关:统计一段英文语句中的单词数和句子数第3关:密码判断第4关:通过数列求自然常数e第5关:双倍余额递减法计算固定资产折旧第6关:销售统计第7关:投资年限计算

第1关:斐波那契数列第2关:统计一段英文语句中的单词数和句子数第3关:密码判断 第4关:通过数列求自然常数e 第5关:双倍余额递减法计算固定资产折旧

pro_daily的博客 8168

【java】RabbitMQ-路由模式RoutingKey

生产者发送消息到交换机并指定一个路由key,消费者队列绑定到交换机时要制定路由key(key匹配就能接受消息,key不匹配就不能接受消息) 例如:我们可以把路由key设置为insert ,那么消费者队列key指定包含insert才可以接收消息,消费者队列key定义为update或者delete就不能接收消息。很好的控制了更新,插入和删除的操作。 采用交换机direct模式 ...

u013938578的博客 1579

1.4 你绝对不能错过的天气查询工具:MCP 标准化接入实战

本文介绍了如何构建一个符合MCP标准的天气查询服务。通过FastMCP框架集成OpenWeatherMap API,实现实时天气、天气预报和历史天气查询功能。文章详细展示了从环境准备、插件设计到控制器实现的完整流程,包括如何定义工具函数、配置路由和中间件。同时讲解了如何将MCP服务封装为LangChain工具并与DeepSeek等大模型集成,还涵盖了缓存、限流等高级特性。该示例演示了如何将任意API标准化为MCP服务,为Agent应用提供统一接口。

yonggeit的博客 3047

高可用架构设计——多节点OpenClaw集群部署与负载均衡(2026企业级)

本文介绍了企业级OpenClaw高可用集群架构设计,重点阐述了多节点部署与负载均衡方案。架构采用分层设计,包括表现层、应用层、数据层和基础设施层,确保99.99%的可用性目标。详细配置了主节点、工作节点和存储节点规格,提供Kubernetes集群部署脚本示例,实现自动化的容器编排管理。通过硬件冗余、故障隔离和弹性扩展等可靠性原则,构建能够应对各种故障场景的稳定AI助手系统。

博客 421

RabbitMQ exchange使用-路由模式(routing)

RabbitMQ exchange使用-路由模式(routing)1 简介路由模式 和 订阅模式的区别:路由模式多了一个routingKey 参数;不同的消费者绑定不同的队列和 routingKey 到交换机;发送者发送消息,指定 不同的routingKey,从而指定让固定的几个消费者使用内置交换机类型 :direct  图中 ,error 、info、warning就是routingKey 2 ...

cj337083172的专栏 1324

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

RabbitMQ 6种队列模式——Routing路由模式

路由模式 一个交换机下面可能会绑定多个队列,但有时候我们不想把这条消息,发送给该交换机下绑定的所有队列中,那么路由模式就能够解决我们的需求。 路由模式跟发布订阅模式类似,在订阅模式的基础上加上了类型,订阅模式下的消息是分发到所有绑定到该交换机的队列,路由模式下的消息只分发到绑定在交换机下指定Routing key的队列。 如上图所示,交换机的类型= direct 路由模式,队列1 与 该交换机之间绑定的key=email,而队列2与该交换机绑定的key=phone,当生产者投递消息时,可以指定

祝我飞黄腾达 2461

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

RabbitMQ--路由模式实战

RabbitMQ路由模式实战

Cavewang的博客 676

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

RabbitMQ消息中间件(五):工作模式之路由模式(Routing)

一、生产者Module (1)pom.xml (2)生产者类 二、消费者Module (1)pom.xml (2)消费者类 三、测试 (1)先启动消费者类,消费监听生产者消息。 (2)在启动生产者类生产消息,消费者消息消息,即控制台输出: ...

HaleyTiger的博客 362

RabbitMQ路由模式

使用同一绑定绑定多个队列是完全合法的 .key。在我们的示例中,我们可以在 X 和 Q1 之间添加一个绑定 绑定键黑色。在这种情况下,直接交换将表现良好 像扇出一样,会将消息广播到所有匹配 队列。路由密钥为黑色的消息将同时传递到 Q1 和 Q2。

知足上进,不负野心。 2663

rabbitmq-demo路由模式routingKey(6)

rabbitmq-demo路由模式routingKey(6)

ls_call520的专栏 116

【RabbitMQ】基础四:路由模式(Routing)

【RabbitMQ】基础四:路由模式(Routing)1. 路由模式说明2. 代码示例2.1 生产者2.2 消费者12.3 消费者22.4 测试3. 总结 1. 路由模式说明 路由模式特点: 队列与交换机的绑定,不能是任意绑定了,而是要指定一个 RoutingKey (路由key)消息的发送方在 向 Exchange发送消息时,也必须指定消息的 RoutingKey 。 Exchange不再把消息交给每一个绑定的队列,而是根据消息的 Routing Key 进行判断,只有队列的Routingkey 与消息

来日浅谈的博客 1813

RabbitMQ系列学习笔记(九)--路由模式

本文介绍了RabbitMQ的路由工作模式,为作者在学习RabbitMQ时的笔记,特此记录,以便后续学习中能够查漏补缺。

Scr1Pt的博客 1574

RabbitMq | springboot (路由模式RoutingKey)整合Direct交换器

引入依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> 消费者: 配置文件: spring.applicat...

俺老孙来也 3084

RabbitMQ六种队列模式-路由模式

前言 RabbitMQ六种队列模式-简单队列 RabbitMQ六种队列模式-工作队列 RabbitMQ六种队列模式-发布订阅 RabbitMQ六种队列模式-路由模式 [本文] RabbitMQ六种队列模式-主题模式 本文带大家了解 RabbitMQ 队列模式中的路由模式。 其实只要看过上篇发布模式后,相信路由模式上手就非常 easy 了,唯一差距就是两个参数,exchange类型和 routi...

niceyoo的博客 2799
上一篇: RabbitMQ发布订阅模式原理和实现(交换机)
下一篇: RabbitMQ整合Spring Booot【Exchange-路由key模式】
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值