首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java RabbitMQ -如何在主题交换中切换关键字?

Java RabbitMQ是一个开源的消息队列中间件,它基于AMQP协议,用于实现分布式系统之间的异步通信。主题交换(Topic Exchange)是RabbitMQ中一种常用的交换机类型,它根据消息的路由键(Routing Key)将消息发送到绑定了匹配的主题的队列中。

在主题交换中切换关键字,需要通过修改绑定的路由键来实现。路由键是一个字符串,可以包含多个单词,以"."分隔。在绑定队列时,可以使用通配符"*"和"#"来匹配路由键的模式。

  1. 使用通配符"":表示匹配一个单词,可以在路由键中的任意位置使用。例如,路由键为"topic.",可以匹配"topic.a"、"topic.b"等。
  2. 使用通配符"#":表示匹配零个或多个单词,只能在路由键的末尾使用。例如,路由键为"topic.#",可以匹配"topic.a"、"topic.a.b"等。

通过切换关键字,可以动态地将消息发送到不同的队列中,实现灵活的消息路由和处理。

以下是Java RabbitMQ中切换关键字的示例代码:

代码语言:java
复制
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

public class TopicExchangeExample {
    private static final String EXCHANGE_NAME = "topic_exchange";
    private static final String ROUTING_KEY = "topic.key";

    public static void main(String[] args) throws Exception {
        // 创建连接工厂
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("localhost");

        // 创建连接
        Connection connection = factory.newConnection();

        // 创建通道
        Channel channel = connection.createChannel();

        // 声明交换机
        channel.exchangeDeclare(EXCHANGE_NAME, "topic");

        // 发布消息
        String message = "Hello, RabbitMQ!";
        channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, null, message.getBytes("UTF-8"));
        System.out.println("Sent message: " + message);

        // 关闭通道和连接
        channel.close();
        connection.close();
    }
}

在上述示例中,我们创建了一个主题交换,并通过路由键"topic.key"发布了一条消息。你可以根据需要修改路由键来切换关键字。

推荐的腾讯云相关产品是消息队列 CMQ,它是腾讯云提供的一种高可靠、高可用、高性能的消息队列服务。CMQ支持主题交换模式,并提供了丰富的功能和易于使用的API,可以满足各种消息通信场景的需求。

腾讯云CMQ产品介绍链接地址:https://cloud.tencent.com/product/cmq

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

RabbitMQ:订阅模型-匹配模式

Exchanges 的类型:直接(direct)、主题(topic)、标题(headers)、扇出(fanout) Routing Key 路由关键字,exchange 根据这个关键字进行消息投递,Exchange...(Fanout)模式 2、RabbitMQ 路由(direct)模式 3、RabbitMQ 主题(topic)模式 ---- 一、RabbitMQ 订阅模型-匹配(topics)模式 1、RabbitMQ...Exchanges 的类型:直接(direct)、主题(topic)、标题(headers)、扇出(fanout) Routing Key 路由关键字,exchange 根据这个关键字进行消息投递,Exchange...; import com.rabbitmq.client.Connection; import java.io.IOException; /** * @author liziheng * @version...发送给主题模式交换机的信息不能是任意设置的选择键,必须是用小数点隔开的一系列的标识符,标识符可以随意填充,但是一般是与某些特征相关联。 选择键不能超过 255 个字符。

45320

Springboot使用RabbitMQ看这几篇就够了(配置篇)!

具体特点包括: 可靠性(Reliability) RabbitMQ 使用一些机制来保证可靠性,持久化、传输确认、发布确认。...多语言客户端(Many Clients) RabbitMQ 几乎支持所有常用语言,比如 Java、.NET、Ruby 等等。...这种模式较为复杂,简单来说,就是每个队列都有其关心的主题,所有的消息都带有一 个“标题”(RouteKey),Exchange会将消息转发到所有关注主题能与RouteKey模糊匹配的队列。...在进行绑定时,要提供一个该队列关心的主题“#.log.#”表示该队列关心所有涉及 log的消息(一个RouteKey为”MQ.log.error”的消息会被转发到该队列)。...“#”表示0个或若干个关键字,“”表示一个关键字*“log.*”能与“log.warn”匹配,无法 与“log.warn.timeout”匹配;但是“log.#”能与上述两者匹配。

1.8K60

RabbitMQ 订阅模型-路由模式

(Fanout)模式 2、RabbitMQ 路由(direct)模式 3、RabbitMQ 主题(topic)模式 ---- 一、RabbitMQ 订阅模型-路由(Direct)模式 1、RabbitMQ...Exchanges 的类型:直接(direct)、主题(topic)、标题(headers)、扇出(fanout) Routing Key 路由关键字,exchange 根据这个关键字进行消息投递...; import com.rabbitmq.client.Connection; import java.io.IOException; /** * @author liziheng * @version...3、RabbitMQ 主题(topic)模式 在实际的运用中,广播模式(fanout)和路由模式(direct)虽然功能能支持一定场景,但是任然有一定的局限性,比如不能根据多重条件来进行路由选择。...发送给主题模式交换机的信息不能是任意设置的选择键,必须是用小数点隔开的一系列的标识符,标识符可以随意填充,但是一般是与某些特征相关联。 选择键不能超过 255 个字符。

66510

rabbitmqrabbitmq工作模型与Java编程(一)

文章目录 rabbitmq工作模型与Java编程 一 典型应用场景 二 基本介绍 AMQP协议 RabbitMQ的特性 工作模型 三种主要的交换机 Direct Exchange 直连交换机 Topic...Exchange 主题交换机 Fanout Exchange 广播交换机 三 Java API编程 创建Maven工程,pom.xml引入依赖 生产者 消费者 参数说明 声明交换机的参数 声明队列的参数...(1)可靠性(Reliability) RabbitMQ 使用一些机制来保证可靠性,持久化、传输确认、发布确认。...定义:主题类型的交换机与一个队列绑定时,可以指定按模式匹配的routing key。...路由规则:发送消息到主题类型的交换机时,routing key符合binding key的模式时,绑定的队列才能收到消息。

35820

浅谈RabbitMQ的基石—高级消息队列协议(AMQP)

直连交换器(direct exchange) 直连交换器非常简单,它检查绑定关键字(binding key)与路由关键字(routing key),只要两者相同,即进行投递。 ?...主题交换器(topic exchange) 此主题非彼(对就是Kafka里的)主题,而更类似wildcard matching。...具体来讲,绑定关键字是由多个域组成的点号分隔的字符串,每个域可以是实际的单词,也可以是通配符,星号 " * " 表示一个词,"#" 表示0个或多个词。...头部交换器就不依赖绑定关键字和路由关键字的匹配,而是检查消息头部中的元数据是否匹配,相对而言更加灵活。...Kafka所用的“黑科技”(零拷贝/内存映射,以及对page cache的利用)都是脱离标准消息队列的设计范畴的,所以不能简单地认为Kafka比RabbitMQ等符合AMQP的消息队列更优。

1.8K30

RabbitMQ通配符模式

一、概念RabbitMQ通配符模式,也被称为主题模式(Topic Pattern),是一种消息传递模式,它允许消息生产者将消息发送到一个交换机(exchange),并使用通配符形式的路由键来描述消息的特性...那么,通配符表达式“item.#”能够匹配“item.insert.abc”或“item.insert”等路由键,而“item.*”则只能匹配“item.insert”这一层的路由键。...要使用RabbitMQ通配符模式,首先需要安装和配置RabbitMQ服务器,然后使用RabbitMQ的客户端库(Java客户端库)来编写生产者和消费者代码。...通配符模式(Topic)是在路由模式的基础上,给队列绑定带通配符的路由关键字,只要消息的RoutingKey能实现通配符匹配,就会将消息转发到该队列。通配符模式比路由模式更灵活,使用topic交换机。...* 参数3:路由关键字,发布订阅模式写""即可 */ channel.queueBind("GET_LOVE", "exchange_topic", "#

20310

RabbitMQ六种队列模式之主题模式

发布订阅模式 什么是主题模式 主题模式与路由键模式类似,都是可以根据 RoutingKey把消息路由到不同的队列中,只不过主题模式的交换机可以让队列在绑定RoutingKey的时候使用通配符,前面我们所了解到的...当队列以‘#’作为绑定关键字,该队列将会接收所有的消息,和fanout一样,忽略消息的绑定关键字。 当绑定关键字中没有‘*’和‘#’时,topic类型交换机就和direct类型交换机一样。...代码演示 本文是基于SpringBoot框架去集成的RabbitMQ,所以最好会SpringBoot基础,再跟着本文一起搭建主题队列Demo 创建一个简单的maven项目 ?...到此SpringBoot整合RabbitMQ实现主题模式代码Demo就结束拉 总结 1、Topic 主题模式可以实现 Pub/Sub 发布与订阅模式和 Routing 路由模式的功能,只是 Topic...3、"#”表示0个或若干个关键字,“*”表示一个关键字“sunny.*”能与“sunny.sms”匹配,无法与“sunny.sms.yd”匹配;但是“sunny.#”能与上述两者匹配。

1.2K40

MQ系列(3)——rabbitMQ结合springboot使用(1)

我们就以这个最简单的消息队列开始来学习如何在项目中使用rabbitMQ。 我们先注册两个队列,一个用于传递String类型消息,一个传递Object类型的数据。...System.out.println(msg); } } rabbitTemplate.convertAndSend()方法是将数据序列化并写入队列中,而其使用的序列化协议自然是java...second-fanout-queue"}) public void secondFanoutQueue(Message msg){ System.out.println(msg); } } 主题交换机...Topic 前文介绍了主题交换机的路由方式,注意我代码中的路由键设置,这里我设置两个bingding-key 分别是 com.muggle.first 和 com.# 我用 routing-key 为...的各类交换机的用法,这些只是 rabbitMQ 的基础特性,下文我们将介绍一些 rabbitMQ 的更复杂的使用方法。

1.5K10

RabbitMQ之topic(主题)Exchange解读

:实现ApplicationRunner接口----基本介绍 在rabbitmq中,生产者发信息不会直接将信息投递到队列中,而是先将信息投递到交换机中,在交换机转发在具体的队列,队列再将信息推送或者拉取消费者进行消费...topic(主题)Exchange主题交换的主要关注点在路由键,路由键通常是由零个或者多个有意义的单词通过点号( . )分隔拼接而成,类似于: topic.route.one ,topic.route,...主题交换中一般的路由键规则跟直接交换路由规则大致相同,都是直接比较是否相等,但是主题交换有特殊的路由键规则。...主题交换中有个两个特殊的匹配符号: * : 匹配任意一个单词# :匹配零个或者多个单词不带两个特殊符号的路由键匹配规则的同直接交换匹配规则一样,带两个特殊符号的类似于模糊匹配,只带单个 # 的就是扇出交换啦..., topic.route.#.# ,topic.route.*# , topic.route.one , # ,* 等等使用场景模糊匹配进行消息的传播,例如给用户推送新闻的时候,可以采用用户搜索过的关键字进行模糊匹配推送

29261

RabbitMQ介绍及安装部署

Fanout交换机转发消息是最快的。 ? 3. 主题交换金类型(Topic) Topic Exchange:主题交换器。通过消息的路由关键字和绑定关键字的模式匹配,将消息路由到被绑定的队列中。...这种路由器类型可以被用来支持经典的发布/订阅消息传输类型——使用主题名字空间作为消息寻址模式,将消息传递给那些部分或者全部匹配主题模式的多个消费者。...主题交换器类型的工作方式如下:绑定关键字用零个或多个标记构成,每一个标记之间用“.”字符分隔。绑定关键字必须用这种形式明确说明,并支持通配符:“*”匹配一个词组,“#”零个或多个词组。...因此绑定关键字“*.stock.#”匹配路由关键字“usd.stock”和“eur.stock.db”,但是不匹配“stock.nasdaq”。 ?...【注意】:请确保两台rabbitmq server主机的/etc/hosts里有ip地址和主机名的对应关系。: 114.55.29.86 log1 114.55.29.241 log2 2.

1.2K60

Exchange(交换机)的作用以及类型

2.主题交换机:Topic Exchange      直连交换机的缺点!      ...所以RabbitMQ提供了一种主题交换机,发送到主题交换机上的消息需要携带指定规则的routing_key,主题交换机会根据这个规则将数据发送到对应的(多个)队列上。      ...:当你声明了一个名为”hello”的队列,RabbitMQ会自动将其绑定到默认交换机上,绑定(binding)的路由键名称也是为”hello”。      ...哈哈this is a directExcthange"); //将消息通过绑定键发送到RabbitMQ主题交换机中,再由主题交换机根据路由键的指向到指定队列 //流程...哈哈this is a directExcthange"); //将消息通过绑定键发送到RabbitMQ的扇形交换机中,再由主题扇形机将消息群发到与之绑定的队列中(与路由键无关)

21230

MQ教程 | RabbitMQ 交换机类型(二)

RabbitMQ中,所有生产者提交的消息都由Exchange来接受,然后Exchange按照特定的策略转发到Queue进行存储 1、性能排序:fanout > direct >> topic 2、比例大约为...说明 一般情况可以使用rabbitMQ自带的Exchange:”"(该Exchange的名字为空字符串,下文称其为default Exchange)。...说明: 这种模式较为复杂,简单来说,就是每个队列都有其关心的主题,所有的消息都带有一个“标题”(RouteKey),Exchange会将消息转发到所有关注主题能与RouteKey模糊匹配的队列。...在进行绑定时,要提供一个该队列关心的主题“#.log.#”表示该队列关心所有涉及log的消息(一个RouteKey为”MQ.log.error”的消息会被转发到该队列)。...“#”表示0个或若干个关键字,“*”表示一个关键字“log.*”能与“log.warn”匹配,无法与“log.warn.timeout”匹配;但是“log.#”能与上述两者匹配。

2.2K20

简单讲解RabbitMQ

JMS JMS即Java消息服务(JavaMessage Service)应⽤程序接⼝,是⼀个Java平台中关于⾯向消息中间件(MOM)的API,⽤于在两个应⽤程序之间,或分布式系统中发送消息,进⾏异步通信...JMS AMQP 定义 Java api Wire-protocol 跨语⾔ 否 是 跨平台 否 是 二、RabbitMQ 1、简介 RabbitMQ是由erlang语⾔开发,基于AMQP(Advanced...Binding: 绑定,它的作⽤就是把exchange和queue按照路由规则绑定起来 Routing Key: 路由关键字,exchange根据这个关键字进⾏消息投递 VHost:...路由模式: direct类型的交换机。 Topic:主题(通配符) 把消息交给符合routing pattern(路由模式)的队列. 将路由键和某模式进⾏匹配。此时队列需要绑定要⼀个模式上。...主题模式(通配符模式):topic类型的交换机。

20020

SpringCloud(六) - RabbitMQ安装,三种消息发送模式,消息发送确认,消息消费确认(自动,手动)

交换机 /** * Topic 主题模式 交换机名 */ public static final String RABBITMQ_TOPIC_EXCHANGE_KH96...,发送消息到主题交换机,主题交换机会根据发送消息的路由键 ,根据匹配规则将消息投递到匹配的队列中 */ public void sendTopicMsg2TopicExchange(String...比如 队列绑定主题交换机的 路由键:KH96.* ,代表发送消息的路由键是以KH96开头,后面只能跟一个单词,:KH96.aaa,KH96.bbb等。....*.KGC,代表发送消息路由键是以KH96开头,中间可以带一个单词,结尾,:KH96.aa.KGC,KH96.bb.KGC。 #代表0或多个单词,比如 队列绑定主题交换机的 路由键:KH96....备注: 如果主题交换机,队列绑定的路由键使用的不是模糊匹配符,主题交换机跟直连交换机一致。 如果单独使用#,代表所有队列都可以收消息,主题交换机跟扇形交换机一致。

1.5K30

RabbitMQ 七种队列模式应用场景案例分析(通俗易懂)

应用场景: 同上,iphone促销活动可以接收主题为iphone的消息,iphone12、iphone13等 远程过程调用(RPC) 还在写大量 if 来判断?...应用场景:需要等待接口返回数据,订单支付 发布者确认(Publisher Confirms) 与发布者进行可靠的发布确认,发布者确认是RabbitMQ扩展,可以实现可靠的发布。... com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import java.io.IOException...直连交换机(Direct exchange): 具有路由功能的交换机,绑定到此交换机的时候需要指定一个routing_key,交换机发送消息的时候需要routing_key,会将消息发送道对应的队列...扇形交换机(Fanout exchange): 广播消息到所有队列,没有任何处理,速度最快 主题交换机(Topic exchange): 在直连交换机基础上增加模式匹配,也就是对routing_key进行模式匹配

35220

RabbitMQ 七种队列模式应用场景案例分析(通俗易懂)

应用场景:同上,iphone 促销活动可以接收主题为 iphone 的消息, iphone12、iphone13 等 远程过程调用(RPC) 如果我们需要在远程计算机上运行功能并等待结果就可以使用...应用场景:需要等待接口返回数据,订单支付 发布者确认(Publisher Confirms) 与发布者进行可靠的发布确认,发布者确认是 RabbitMQ 扩展,可以实现可靠的发布。...; import com.rabbitmq.client.DeliverCallback; import java.io.IOException; import java.util.concurrent.TimeoutException...直连交换机(Direct exchange):具有路由功能的交换机,绑定到此交换机的时候需要指定一个routing_key,交换机发送消息的时候需要routing_key,会将消息发送道对应的队列 扇形交换机...(Fanout exchange):广播消息到所有队列,没有任何处理,速度最快 主题交换机(Topic exchange):在直连交换机基础上增加模式匹配,也就是对routing_key进行模式匹配,*

1.3K11

RabbitMQ 七种队列模式应用场景案例分析(通俗易懂)

应用场景: 同上,iphone促销活动可以接收主题为iphone的消息,iphone12、iphone13等 远程过程调用(RPC) ?...应用场景:需要等待接口返回数据,订单支付 发布者确认(Publisher Confirms) 与发布者进行可靠的发布确认,发布者确认是RabbitMQ扩展,可以实现可靠的发布。...com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import java.io.IOException...直连交换机(Direct exchange): 具有路由功能的交换机,绑定到此交换机的时候需要指定一个routing_key,交换机发送消息的时候需要routing_key,会将消息发送道对应的队列...扇形交换机(Fanout exchange): 广播消息到所有队列,没有任何处理,速度最快 主题交换机(Topic exchange): 在直连交换机基础上增加模式匹配,也就是对routing_key

31030
领券