rabbit主题交换机(代码片段)

fuguang fuguang     2023-03-12     696

关键词:

主题交换机类型为: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 查看详情