关键词:
主题交换机类型为:topic。
是直连交换机的一种。只是比直连交换机更灵活,在路由键上引入了通配符的概念
topic交换机支持通配符的路由键. *表示匹配一个词。 #匹配所有
生产者 :
package com.kf.queueDemo.exchange.topic; import java.io.IOException; import java.util.concurrent.TimeoutException; import com.kf.utils.RabbitConnectionUtils; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; /** * 路由模式的生产者(带路由键) * @author kf * */ public class TopicProducer //交换机 private static String TOPICEXCHANGE = "TOPICEXCHANGE"; //路由键 private static String ROUTINGKEY = "log.sms"; public static void main(String[] args) throws IOException, TimeoutException Connection connection = RabbitConnectionUtils.getConnection(); Channel channel = connection.createChannel(); //声明交换机类型为主题交换机模式 channel.exchangeDeclare(TOPICEXCHANGE, "topic"); String msg = "topic_mes"; //发送消息给 指定交换机EXCHANGENAME的指定路由键ROUTINGKEY上 channel.basicPublish(TOPICEXCHANGE, ROUTINGKEY, null, msg.getBytes()); channel.close(); connection.close();
消费者:
package com.kf.queueDemo.exchange.topic; import java.io.IOException; import java.util.concurrent.TimeoutException; import com.kf.utils.RabbitConnectionUtils; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.DefaultConsumer; /** * 路由模式的邮件消费者 * @author kf * */ public class TopicEMAILConsumer //队列名 private static String EMAILQUEUENAME = "EMAILQUEUENAME"; //路由键名 topic交换机支持通配符的路由键. *表示匹配一个词。 #匹配所有 private static String SMSROUTINGKEY = "sms"; private static String EMAILROUTINGKEY = "log.*"; //交换机 private static String TOPICEXCHANGE = "TOPICEXCHANGE"; public static void main(String[] args) throws IOException, TimeoutException System.out.println("邮件消费者启动====="); Connection connection = RabbitConnectionUtils.getConnection(); Channel channel = connection.createChannel(); //创建队列:第一个参数是队列名,后面的参数还没搞清楚干嘛的 channel.queueDeclare(EMAILQUEUENAME, false, false, false, null); //绑定队列到交换机的指定路由键 channel.queueBind(EMAILQUEUENAME, TOPICEXCHANGE, EMAILROUTINGKEY); DefaultConsumer consumer = new DefaultConsumer(channel) public void handleDelivery(String consumerTag, com.rabbitmq.client.Envelope envelope, com.rabbitmq.client.AMQP.BasicProperties properties, byte[] body) throws IOException System.out.println("进入邮件接收消息的监听"); String s = new String(body, "utf-8"); System.out.println("邮件消费者接收到消息:"+s); ; ; //参数分别是:队列名,是否自动应答,监听的回调类 channel.basicConsume(EMAILQUEUENAME, true, consumer);
package com.kf.queueDemo.exchange.topic; import java.io.IOException; import java.util.concurrent.TimeoutException; import com.kf.utils.RabbitConnectionUtils; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.DefaultConsumer; /** * 路由模式的短信消费者 * @author kf * */ public class TopicSMSConsumer //队列名 private static String SMSQUEUENAME = "SMSQUEUENAME"; //路由键名 topic交换机支持通配符的路由键. *表示匹配一个词。 #匹配所有 private static String SMSROUTINGKEY = "log.#"; private static String EMAILROUTINGKEY = "EMAIL"; //交换机 private static String TOPICEXCHANGE = "TOPICEXCHANGE"; public static void main(String[] args) throws IOException, TimeoutException System.out.println("短信消费者启动====="); Connection connection = RabbitConnectionUtils.getConnection(); Channel channel = connection.createChannel(); //创建队列:第一个参数是队列名,后面的参数还没搞清楚干嘛的 channel.queueDeclare(SMSQUEUENAME, false, false, false, null); //绑定队列到交换机的指定路由键 channel.queueBind(SMSQUEUENAME, TOPICEXCHANGE, SMSROUTINGKEY); //绑定多个交换机的路由键 channel.queueBind(SMSQUEUENAME, TOPICEXCHANGE, EMAILROUTINGKEY); DefaultConsumer consumer = new DefaultConsumer(channel) public void handleDelivery(String consumerTag, com.rabbitmq.client.Envelope envelope, com.rabbitmq.client.AMQP.BasicProperties properties, byte[] body) throws IOException System.out.println("进入短信接收消息的监听"); String s = new String(body, "utf-8"); System.out.println("短信消费者接收到消息:"+s); ; ; //参数分别是:队列名,是否自动应答,监听的回调类 channel.basicConsume(SMSQUEUENAME, true, consumer);
rabbitmq之topic交换器模式下开发(代码片段)
Topic交换器,即主题模式,进行规则匹配。一、Provider配置文件1spring.application.name=provider2spring.rabbitmq.host=192.168.50.303spring.rabbitmq.port=56724spring.rabbitmq.username=rabbit5spring.rabbitmq.password=rabbit6#设置交换 查看详情
rabbit的fanout扇形交换机(代码片段)
rabbit引入交换机概念。交换机与生产者绑定。队列与消费者绑定。队列又与交换机绑定。扇形交换机是 fanout类型的。类似于其他消息中间件的topic。一对多(生产者推送消息到指定交换机,一个或多个绑定了此交换机的消费... 查看详情
rabbit的直连交换机direct(代码片段)
直连交换机类型为:direct。加入了路由键routingKey的概念。就是说生产者投递消息给指定交换机的指定路由键。只有绑定了此交换机指定路由键的消息队列才可以收到消息。 生产者:packagecom.kf.queueDemo.exchange.direct;importjava.io.IO... 查看详情
rabbitmq之主题模糊匹配(代码片段)
topic类型的交换器允许在RabbitMQ中使用模糊匹配来绑定自己感兴趣的信息通过匹配交换器,我们可以配置更灵活的消息系统 匹配交换器的匹配符*(星号)表示一个单词#(井号)表示零个或者多个单词 这次的例子中,我们... 查看详情
rabbit入门教程(代码片段)
...息,消息接受确认,消息重传等可靠机制。灵活的路由。交换机可以根据广播,或者根据路由键或匹配符匹配到不同的队列。高可用的集群。应用场景1.异步处理减少用户对不必要的耗时操作的等待,处理结果以异步方式(邮件... 查看详情
rabbitmq_5主题模式(代码片段)
...hash)可以代替零个或多个单词。路由键设置为“quick.orange.rabbit”的消息将发送到两个队列消息“lazy.orange.elephant”也会发给他们两个。另一方面,“quick.orange.fox”只会进入第一个队列,而“lazy.brown.fox”只会进入第二个队列。“l... 查看详情
rabbitmq学习:rabbitmq之扇形交换机主题交换机(代码片段)
前言上篇我们学习了rabbitmq的作用以及直连交换机的代码实现,这篇我们继续看如何用代码实现扇形交换机和主题交换机一、扇形交换机 1.生产者 /***生产者*/publicclassLogProducer//交换机名称publicfinalstaticStringEXCHANGE_NAME="... 查看详情
主题模式(代码片段)
...:"stock.usd.nyse","nyse.vmw","quick.orange.rabbit"。rountingkey中可以包含任意多个单词,最多255个字节。bindingkey可以存在如下两种特殊的字符即:1、*(星号)可以代替一个单词。2、#(哈希)可以替代零个或多... 查看详情
rabbit-mq学习1:基本概念和快速入门(代码片段)
rabbit-mq学习1:基本概念和快速入门一、什么是MQ消息队列(MessageQueue,简称MQ)本质是个队列,遵循先入先出,主要用途:不同进程Process/线程Thread之间通信。可以用来在两个进程间进行异步的数据交换。进程A把消息放入消息队... 查看详情
rabbitmq指南之五:主题交换器(topicexchange)(代码片段)
原文:RabbitMQ指南之五:主题交换器(TopicExchange) 在上一章中,我们完善了我们的日志系统,用direct交换器替换了fanout交换器,使得我们可以有选择性地接收消息。尽管如此,仍然还有限制:不能基于多个标准进行路由。在... 查看详情
rabbitmq指南之五:主题交换器(topicexchange)(代码片段)
在上一章中,我们完善了我们的日志系统,用direct交换器替换了fanout交换器,使得我们可以有选择性地接收消息。尽管如此,仍然还有限制:不能基于多个标准进行路由。在我们的日志系统中,我们可能不仅希望根据日志等... 查看详情
springboot整合rabbitmq(topic主题模式)(代码片段)
在direct模式基础上改,但是此次使用注解方式消费者修改对应的consumer,用注解方式定义交换机和队列的关系@Service@RabbitListener(bindings=@QueueBinding(value=@Queue(value="duanxin.topic.queue",durable="true",autoDelete="false"),exchange=@Exchange(v 查看详情
rabbitmq之fanout交换器模式开发(代码片段)
Fanout模式,即广播模式,一个发送到交换机的消息会被转发到与该交换机绑定的所有队列上。一、Provider配置文件1spring.application.name=provider2spring.rabbitmq.host=192.168.50.303spring.rabbitmq.port=56724spring.rabbitmq.username=rabbit5spring.rabbitm 查看详情
鸡兔同笼2(代码片段)
publicclassDemo2publicstaticvoidmain(String[]args)//3594//12//14for(intrabbit=1;rabbit<=94/4;rabbit++)intchicken=35-rabbit;if(chicken*2+rabbit*4==94)System.out.println(chicken+":"+rabbit);& 查看详情
springboot实战集成rebbitmq(代码片段)
...工作原理图1.1配置阶段1.2生产者1.3消费者2.Maven依赖3.常用交换机类型3.1direct直连交换机3.2fanout广播交换机3.3topic主题交换机4.Direct直连交换机4.1yml配置4.2配置类4.3消息推送类4.4消息监听类4.5测试5.Fanout广播交换机5.1配置类5.2消息推... 查看详情
rabbitmq:理解消息通信rabbitmq(代码片段)
原文:RabbitMQ(二):理解消息通信RabbitMQ一、消费者、生产者和信道 生产者(producer):生产者创建消息,然后发布(发送)到代理服务器(RabbitMQ),可以说发送消息的程序就是生产者。什么是消息?消息包含两部分:有效载荷和标签。... 查看详情
06-rabbitmq-交换机-随机队列(代码片段)
一、临时队列之前的章节我们使用的是具有特定名称的队列(还记得hello和ack_queue吗?)。队列的名称我们来说至关重要-我们需要指定我们的消费者去消费哪个队列的消息。每当我们连接到Rabbit时,我们都需要一个全新的空... 查看详情
rabbitmq主题模式(代码片段)
...ion=Amqp.getConnection();Channelchannel=connection.createChannel();//声明交换机channel.exchangeDeclare(Exchange_NAME,"topic");//在手动确认机制之前//一次只发送一条消息,给不同的消费者channel.basicQos(1);Stringmessage="hellops";StringroutingKey="goods.dele 查看详情