RabbitMQ的Topics 通配符模式(Topic)

  • 模式说明

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

  • 图解:

    1. 红色 Queue:绑定的是 usa.# ,因此凡是以 usa. 开头的 routing key 都会被匹配到
    2. 黄色 Queue:绑定的是 #.news ,因此凡是以 .news 结尾的 routing key 都会被匹配

  • 其实这个Topics 通配符模式是Exchange常见类型之一的Topic

  • 代码编写生产者(Topic模式)步骤

    1. 创建工厂
    2. 设置参数
    3. 创建连接
    4. 创建channel(管道)
    5. 创建队列(这里只创建两个)
    6. 创建交换机
    7. 绑定队列和队列
    8. 发送消息
    9. 关闭连接
package com.yang;import com.rabbitmq.client.BuiltinExchangeType;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class Producer_Topics {public static void main(String[] args) throws IOException, TimeoutException {//1. 创建工厂ConnectionFactory factory = new ConnectionFactory();//2. 设置参数factory.setHost("192.168.20.146");factory.setPort(5672);factory.setUsername("test");factory.setPassword("test");factory.setVirtualHost("/test");//3. 创建连接Connection connection = factory.newConnection();//4. 创建管道Channel channel = connection.createChannel();//5. 创建队列String queueName1 = "test_topic_queue1";String queueName2 = "test_topic_queue2";channel.queueDeclare(queueName1,true,false,false,null);channel.queueDeclare(queueName2,true,false,false,null);//6. 创建交换机String  exchangeName = "";channel.exchangeDeclare(exchangeName, BuiltinExchangeType.TOPIC,true,false,false,null);//7. 绑定队列和交换机/*queueBind(String queue, String exchange, String routingKey)参数:1. queue:队列名称2. exchange:交换机名称3. routingKey:路由键,绑定规则如果交换机的类型为fanout ,routingKey设置为""*/// routing key  系统的名称.日志的级别。//需求: 所有error级别的日志存入数据库,所有order系统的日志存入数据库channel.queueBind(queueName1, exchangeName, "#.error");channel.queueBind(queueName2, exchangeName, "order.*");//8. 发送消息String body = "日志信息:张三调用了findAll方法...日志级别:info...";channel.basicPublish(exchangeName, "order.ss", null, body.getBytes());//9. 释放资源channel.close();connection.close();}
}
  • 尝试执行之后(只有queueName2有,因为只有order.*符合)
  • 发送别的消息
 //8. 发送消息String body = "日志信息:张三调用了delete方法...发生错误...error...";channel.basicPublish(exchangeName, "order.error", null, body.getBytes());
  • 尝试执行之后(只有queueName1和2都符合)

  • 代码编写消费者(Topic模式)步骤(其实不管什么模式消费者基本都这样写,就改改一个地方而已)

    1. 创建工厂
    2. 设置参数
    3. 创建连接
    4. 创建管道channel
    5. 接收消息
package com.yang;import com.rabbitmq.client.*;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class Consumer_Topics1 {public static void main(String[] args) throws IOException, TimeoutException {//        1.  创建工厂ConnectionFactory factory = new ConnectionFactory();
//        2. 设置参数factory.setHost("192.168.20.146");factory.setPort(5672);factory.setUsername("test");factory.setPassword("test");factory.setVirtualHost("/test");//3. 创建连接Connection connection = factory.newConnection();
//        //4. 创建管道Channel channel = connection.createChannel();
//        5. 接收消息String queueName = "test_topic_queue1";Consumer consumer = new DefaultConsumer(channel){@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, AMQP.BasicProperties properties, byte[] body) throws IOException {System.out.println("body:"+new String(body));System.out.println("将日志信息打印到控制台.....");}};channel.basicConsume(queueName,true,consumer);}
}
  • 第二个队列只需要队列名改一下就行了!
String queueName = "test_topic_queue2";
  • 两个的执行结果

    1. Consumer_Topics1(队列:test_topic_queue1)

    2. Consumer_Topics2(队列:test_topic_queue2)

  • 和我们的需求一样: 所有error级别的日志存入数据库,所有order系统的日志存入数据库

  • 小结

    • Topic 主题模式可以实现 Pub/Sub 发布与订阅模式和 Routing 路由模式的功能,只是 Topic 在配置routing key 的时候可以使用通配符,显得更加灵活。

以上就是Topics 通配符模式的全部内容

RabbitMQ的Topics 通配符模式(Topic)相关推荐

  1. 通配符模式 topic

    2019独角兽企业重金招聘Python工程师标准>>> package com.shi.topic;import java.io.IOException; import java.u ...

  2. 消息队列(四)——rabbitMQ四种工作模式

    RabbitMQ工作模式 模式总结: 1.简单模式helloworld 一个生产者,一个消费者,不需要交换机(使用默认交换机) 2.工作队列模式Work Queue 一个生产者,多个消费者(竞争关系) ...

  3. RabbitMQ消息队列(六):SpringBoot整合之通配符模式

    RabbitMQ消息队列(六):SpringBoot整合之通配符模式 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AeZQrNHS-1660220618697)(E: ...

  4. 快速入门RabbitMQ(详细)第二篇:RabbitMQ五种工作模式的使用及总结

    4. RabbitMQ工作模式 4.1. Work queues工作队列模式 Work Queues 与入门程序的 简单模式 相比,多了一个或一些消费端,多个消费端共同消费同一个队列中的消息.应用场景 ...

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

    RabbitMQ有以下几种工作模式 : 1.Work queues  工作队列 2.Publish/Subscribe 发布订阅 3.Routing      路由 4.Topics        通 ...

  6. RabbitMQ通配符模式

    通配符模式 一个消息发送者,发送消息 每个消息接收者,都已一个独立的队列 消息会发送到交换机,由交换机发送到队列 根据key,模糊匹配,来接收消息 Send 发送者 package cn.itcast ...

  7. (需求实战_进阶_04)SSM集成RabbitMQ 通配符模式 关键代码讲解、开发、测试

    背景: 为了减轻服务器的压力,现在原有项目的基础上集成消息队列来异步处理消息! 此项目是企业真实需求,项目的代码属于线上生产代码,直接用于生产即可! 此项目采用MQ发送消息模式为:通配符模式,如果对R ...

  8. rabbitmq入门(四)Topics主题模式

    文章目录 Topics主题模式 代码实现 测试 总结 下一章 Topics主题模式 交换机类型为 topics - 将路由和某个模式匹配,# 匹配一个或者多个,* 匹配一个.例如交换机绑定的routi ...

  9. RabbitMQ的三种模式-----主题模式(Topic)

    主题模式(Topic): 任何发送到Topic Exchange的消息都会被转发到所有关心RouteKey中指定话题的Queue 上 1:简述 如上图所示 此类交换器使得来自不同的源头的消息可以到达一 ...

最新文章

  1. 关于C#开发山寨操作系统,程序语言,浏览器,IDE,Office,Photoshop等大型程序的可行性歪论及意义...
  2. php 对接 asp,PHP模拟asp中response类实现方法
  3. 结构体:计算学生平均分
  4. Codeforces 997E Good Subsegments (线段树)
  5. oracle中姓名取姓氏,Oracle SQL - 解析一個名稱字符串並將其轉換爲第一個姓氏和名字...
  6. XMLHttpRequest对象在IE和Firefox中创建方式有没有不同?
  7. Java 开源库精选(持续更新)
  8. python print中文_python:print含有中文的list
  9. MapXtreme 2005 学习心得 缩放比例下不显示图层(十一)
  10. lisp正负调换_坐标提取lisp程序
  11. 《jQuery、jQuery UI及jQuery Mobile技巧与示例》——7.4 示例:使用按钮集装饰单选框...
  12. SUBSTR函数的使用
  13. 常见损失函数及正则项
  14. 安装erlang没有bin文件夹_RabbitMQ的安装和使用
  15. 使用layui中的laypage遇到的各种问题总结
  16. 直方图均衡化 java,OpenCV Java 直方图均衡化
  17. 能不用事务就尽量别用
  18. DPDK应用示例指南简介(汇总)
  19. OpenCV-Python的文本透视矫正与水平矫正
  20. STC15内部ADC测电压

热门文章

  1. Spring boot + maven + jetty9在提交表单的时候出现Form too large
  2. IDM Computer Solutions(UltraEdit V26.10.0.30、UltraCompare V18.10.0.78、UEStudio、UltraFTP==) 全系列最新破解
  3. android上传图片被旋转,解决android有的手机拍照后上传图片被旋转的问题
  4. 基于jira的缺陷自动化报表分析 (四)按人员统计缺陷情况
  5. Excel 中统计全表所有人名各出现了多少次
  6. 地理生物结业考_不到30天,初二学年地理、生物结业考试开考,老师们说……...
  7. 使用Java编写欧式期权理论理论计算公式
  8. 傻傻分不清:时间趋势项与时间虚拟变量
  9. 我用python写了个小病毒,老板再也不敢扣我工资啦
  10. paip QQ音乐导出歌单总结