RabbitMQ之Topics通配符模式

2023电赛B题实战解析:基于立创天空星开发板的同轴线缆长度与负载测量系统 本文详细解析了2023年全国大学生电子设计竞赛B题的实战方案,重点介绍了基于立创EDA天空星开发板(STM32F103)的同轴线缆长度与负载测量系统。文章深入剖析了两种核心测量方案,并推荐了更稳定易实现的NE555测电容法,提供了从硬件选型、电路设计到软件编程、参数标定的完整“施工图”,实测精度可达厘米级和皮法级,为电赛复现与高精度测量学习提供了清晰指导。 阅读详情

RabbitMQ之Topics通配符模式

说明:此模式实在路由key模式的基础上,使用了通配符来管理消费者接收消息。生产者P发送消息到交换机X,type=topic,交换机根据绑定队列的routing key的值进行通配符匹配;

符号#:匹配一个或者多个词lazy.# 可以匹配lazy.irs或者lazy.irs.cor
符号*:只能匹配一个词lazy.* 可以匹配lazy.irs或者lazy.cor

 

注意交换机的类型:direct  fanout  topic  headers

 

 

“ * ”的使用

生产者:

package com.toov5.topic;

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 TopicProducer {
    //交换机名称
     private static final String EXCHANGE_NAME = "my_topic"; 
     public static void main(String[] args) throws IOException, TimeoutException {
        //建立MQ连接
         Connection connection = MQConnectionUtils.newConnection();
        //创建通道
          Channel channel = connection.createChannel();
          //生产者绑定交换机
          channel.exchangeDeclare(EXCHANGE_NAME, "topic");  //交换机名称  交换机类型
          String routingKey="log.email";    //消息只会给邮件类型的
          //创建对应的消息 
          String msString = "my_Routing_destination_msg"+routingKey;
          //通过频道 发送消息
          System.out.println("生产者投递消息:"+msString);
          channel.basicPublish(EXCHANGE_NAME, routingKey, null, msString.getBytes());
          //关闭通道 和 连接
          channel.close();
          connection.close();
    }
    
} 

消费者:

package com.toov5.topic;

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 ConsumerSMSTopic {
    private static final String SMS_QUEUE ="sms_queue_topic";
    //交换机名称
   private static final String EXCHANGE_NAME = "my_topic"; 
     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, "log.*");
          //消费者监听消息
      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);   //绑定队列 事件监听
            
    }
}
package com.toov5.topic;

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 ConsumerEmailTopic {
    private static final String EMAIL_QUEUE ="email_queue_topic";
    //交换机名称
   private static final String EXCHANGE_NAME = "my_topic"; 
     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, "log.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.topic;

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 TopicProducer {
    //交换机名称
     private static final String EXCHANGE_NAME = "my_topic"; 
     public static void main(String[] args) throws IOException, TimeoutException {
        //建立MQ连接
         Connection connection = MQConnectionUtils.newConnection();
        //创建通道
          Channel channel = connection.createChannel();
          //生产者绑定交换机
          channel.exchangeDeclare(EXCHANGE_NAME, "topic");  //交换机名称  交换机类型
          String routingKey="log.email.sms";    //消息只会给邮件类型的
          //创建对应的消息 
          String msString = "my_Routing_destination_msg"+routingKey;
          //通过频道 发送消息
          System.out.println("生产者投递消息:"+msString);
          channel.basicPublish(EXCHANGE_NAME, routingKey, null, msString.getBytes());
          //关闭通道 和 连接
          channel.close();
          connection.close();
    }
    
} 

消费者:

package com.toov5.topic;

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 ConsumerSMSTopic {
    private static final String SMS_QUEUE ="sms_queue_topic";
    //交换机名称
   private static final String EXCHANGE_NAME = "my_topic"; 
     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, "log.#");
          //消费者监听消息
      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);   //绑定队列 事件监听
            
    }
}
package com.toov5.topic;

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 ConsumerEmailTopic {
    private static final String EMAIL_QUEUE ="email_queue_topic";
    //交换机名称
   private static final String EXCHANGE_NAME = "my_topic"; 
     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, "log.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);   //绑定队列 事件监听
            
    }
}

总结 “*” 匹配一个词   “#”匹配多个词

 

YOLOv11增量学习数据回放优化:解决新类别引入时的灾难性遗忘问题 本文提出了一种基于生成式潜在回放和提示学习的YOLOv11增量学习系统,旨在解决目标检测中的灾难性遗忘问题。系统采用改进的YOLOv11骨干网络,结合条件变分自编码器生成旧类别特征,并通过渐进式提示调优模块实现高效参数更新。关键技术包括:1) C3k2模块和C2PSA注意力增强特征提取;2) CLIP引导的VAE潜在空间数据回放;3) 类特定与超类别提示相结合的增量调优策略;4) 自适应特征金字塔与显式视觉中心融合机制。实验表明,该方法在保持原有检测性能的同时,显著降低了增量学习过程中的遗忘现象。 阅读详情

相关推荐

江科大笔记—OLED调试工具

OLED介绍及调试工具

m0_62005595的博客 658

RabbitMQ--Topics通配符模式实战

RabbitMQ通配符模式实战

Cavewang的博客 1395

2018南京大学计算机夏令营机试

1. Count number of binary strings without consecutive 1’s Given a positive integer n(3≤n≤90), count all possible distinct binary strings of length n such that there are no consecutive 1's . Examples...

climber16的博客 1万+

RabbitMQ快速入门

3.1. 搭建示例工程 3.1.1. 创建工程 创建一个两个模块,一个生产者,一个消费者 3.1.2. 添加依赖 往rabbitmq-consumer和rabbitmq-producer两个的pom.xml文件中添加如下依赖: <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>5.6.0</

zyq13870585230的博客 615

EB Tresos激活失败?3种实用解决方案帮你搞定(含离线激活步骤)

本文针对EB Tresos软件激活失败问题,提供了三种实用的解决方案。详细分析了激活失败的常见根源,并系统阐述了在线环境下的排查步骤、无网环境下的离线激活全流程,以及高级许可证环境修复方法,帮助汽车电子工程师快速恢复开发环境。

milk8的博客 609

Hive SQL零基础到精通:100道练习题+答案,SQL能力快速提升

我将以我15年架构与开发的经验,带领大家从零基础到精通,通过精心设计的100道练习题及其详解,系统地、深度地掌握Hive SQL的核心精髓。它可以将结构化的数据文件映射为一张数据库表,并提供了一套类SQL的查询语言——HiveQL(简称HQL),允许熟悉SQL的用户直接查询存储在HDFS上的海量数据。它将Job描绘为DAG(有向无环图),允许更灵活的任务编排,避免不必要的中间落盘,可以复用容器,从而大幅降低延迟。希望你以此文为起点,在广阔的大数据世界里继续遨游,成为一名真正的数据高手!

架构师的AI之路,分享AI应用开发架构的学习与实践。 798

RabbitMQ系列学习笔记(十)--通配符模式

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

Scr1Pt的博客 1531

智能车图像处理24-进阶篇16--三叉路口的判断

这篇文章主要讲述图像处理中如何判断三叉路口并进行补线操作。

taiyuezyh的博客 1万+

【RabbitMQ】通配符模式(Topics)

例如,路由键“news.sports.#”可以匹配诸如“news.sports.football”和“news.sports.tennis”等多个消息,而路由键“news.sports.*”只能匹配到一个消息,如“news.sports.football”。

wosixiaokeai的博客 1141

Cadence画PCB的傻瓜式教程

1.原理图1)建立元件库2)建立原理图3)在原理图中画好电路图4)利用MENTOR-GRAPHICS-IPC-7351-LP-VIEWER查看元件的封装信息,用pad designer画焊盘,用pcb editor画元件的封装(对照LP_VIEWER),(也可以使用package wizard)5)在原理图中为元件添加封装信息(键入)6)Drc检查7)生成网表2.Pcb1)设置...

tianpu2320959696的博客 1万+

注意力机制模块:CA(坐标注意力)二次创新:融合深度可分离卷积,打造 CADS 模块

本文提出CADS模块,将坐标注意力(CA)与深度可分离卷积(DSC)深度融合,优化移动端AI部署效率。通过重构CA的计算范式,用深度卷积替代传统1×1卷积,在保持精度的同时显著降低计算开销。文章深入分析了CA的计算瓶颈和DSC的实际效率问题,详细阐述了CADS的设计原理与PyTorch实现,并提供了多组性能对比数据。该模块可直接应用于YOLO、UNet等主流模型,为移动端AI部署提供高效解决方案。

ZXSXJ的博客 96

RabbitMQ消息中间件(四):工作模式之发布订阅模式 (Publish/subscribe)

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

HaleyTiger的博客 1149

手把手教你学Simulink——基于Simulink的固态变压器(SST)多级协同控制

摘要:本文详细介绍了基于Simulink的固态变压器(SST)多级协同控制方法。SST作为新一代智能电网核心设备,通过AC-DC整流、DC-DC隔离和DC-AC逆变三级架构实现电能高效转换。针对多级耦合难题,提出能量-功率协同控制策略:纵向解耦电压环与功率前馈,横向联动级间功率指令。在Simulink中搭建10kV/400V系统模型,实现直流母线电压波动<2%的动态性能。特别设计了负载突变时的三级协同机制,通过虚拟惯性算法和前馈控制实现快速响应。文章包含完整的建模步骤、控制推导和参数设置,为电力电子工

MHD0815的博客 195

【RabbitMQ】Topics 通配符模式(使用案例)

本文介绍了RabbitMQ中的Topic通配符模式。与Routing模式相比,Topic模式使用topic类型交换机,支持通配符匹配。

Edison's 小宇宙 8万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

RabbitMQ通配符模式Topics

RabbitMQ通配符模式Topics

weixin_42499566的博客 201

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

RabbitMQ的工作模式Topics  通配符,test测试代

RabbitMQ有以下几种工作模式 : 1、Work queues  工作队列 2、Publish/Subscribe 发布订阅 3、Routing      路由 4、Topics        通配符 5、Header      Header 转发器 6、RPC     远程调用 进入浏览器,输入:http://localhost:15672 初始账号和密码:guest/gue...

苏凯的博客 489

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

RabbitMQ Topics 通配符工作模式案例

RabbitMQ Topics 通配符工作模式案例

xiaotiaoza的博客 216

RabbitMQ3.7 研究-工作模式之Topics通配符模式

目录3.4 Topics通配符模式3.4.1统配符模式介绍3.4.2生产者3.4.3 消费端3.4.4 测试3.4.5 小结 3.4 Topics通配符模式 3.4.1统配符模式介绍 路由模式: 1、每个消费者监听自己的队列,并且设置带统配符的routingkey。 2、生产者将消息发给broker,由交换机根据routingkey来转发消息到指定的队列。 3.4.2生产者 案例: 根据用户的通...

652

RabbitMQ工作模式——Topics模式(通配符模式、附代码)

大伙可以到我的RabbitMQ专栏获取更多信息 demo示例这里拿 模式说明 Topics模式,也是功能最为强大的一种模式,与routing模式类似,只不过是通过通配符来进行message与queue之间的匹配。 当交换机的模式为topic模式时,根据message的routing key去匹配queue的通配符,以上图为例,Q1的通配符为 *.orange* ,Q2的通配符为 *.*.rabbit 和 lazy.# * 和 # 都是占位符,* 代表一个单词,# 代表0个或者多个单词,单词直接

保暖透气大裤衩LeoLee的博客 645

7-RabbitMQ工作模式-Topics通配符模式

7-RabbitMQ工作模式-Topics通配符模式Topics通配符模式1. 模式说明Topic类型与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符!Routingkey 一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如:item.inse......

DevOps海洋的渔夫@专栏 760

RabbitMQ:Topics主题/通配符模式

Topic类型与Direct相比,都是可以根据RoutingKey把消息路由到不同的队列。只不过Topic类型Exchange可以让队列在绑定Routing key 的时候使用通配符Routingkey 一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: item.insert通配符规则:#:匹配0个或者多个词*:刚好可以匹配一个词。

梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记 1958

RabbitMQ工作模式3-Pub/Sub 订阅模式 RabbitMQ工作模式4-Routing 路由模式 RabbitMQ工作模式5-Topics 通配符模式

交换机用的是广播:所以路由键为" "

weixin_54401017的博客 394

rabbitmq05 Topics通配符模式

一、 ” # :匹配一个或多个词 * :匹配不多不少恰好1个词 举例: item.# :能够匹配 item.insert.abc 或者 item.insert item.* :只能匹配 item.insert 二、案例需求 一个频道 一个交换机(类型为:topic) 两个队列 两个消费者(一个消费者 路由key为 info.insert,另一个为 infor.# 和 *.delet.#) 三、代码 package com.xiaoxu.topics; import com.rabbitmq.client

qq_44798321的博客 474

RabbitMQ的Topics 通配符模式(Topic)

RabbitMQ的Topics 通配符模式(Topic) 模式说明 Topic 类型与 Direct 相比,都是可以根据 RoutingKey 把消息路由到不同的队列。只不过 Topic 类型Exchange 可以让队列在绑定 Routing key 的时候使用通配符! Routingkey 一般都是有一个或多个单词组成,多个单词之间以”.”分割,例如: item.insert 通配符规则:# 匹配一个或多个词,* 匹配不多不少恰好1个词,例如:item.# 能够匹配 item.insert.abc

weixin_42947972的博客 5853

5.rabbitmq--通配符模式Topics

rabbitmq--通配符模式Topics topic模式也称为主题模式,其实他相对于routing模式最大的好处就是他多了一种匹配模式的路由,怎么理解匹配呢,其实就相当于我们之前正则的.*这种,不过他的匹配机制可能不是这种(其实除了匹配规则外,他的作用就和routing模式一样),而他的工作流程图如下: OK! 先说一下他的匹配规则: 绑定键binding key也必须是这...

alibb20000的博客 238

【java】RabbitMQ-通配符模式Topics

说明:此模式实在路由key模式的基础上,使用了通配符来管理消费者接收消息。生产者P发送消息到交换机X,type=topic,交换机根据绑定队列的routing key的值进行通配符匹配; 符号#:匹配一个或者多个词lazy.# 可以匹配lazy.irs或者lazy.irs.cor 符号*:只能匹配一个词lazy.* 可以匹配lazy.irs或者lazy.cor ...

u013938578的博客 401
上一篇: RabbitMQ整合Spring Booot【Exchange-路由key模式】
下一篇: RabbitMQ整合Spring Booot【Exchange-Topics模式】
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值