RabbitMQ八:交换机类型Exchange Types--Topic介绍

前言

上一章节,我们说了两个类型,本章我们说一下其三:Topic Exchange

Topic Exchange 

Topic Exchange – 将路由键和某模式进行匹配。此时队列需要绑定要一个模式上。符号“#”匹配一个或多个词,符号“*”匹配不多不少一个词。因此“audit.#”能够匹配到“audit.irs.corporate”,但是“audit.*” 只会匹配到“audit.irs”。我在RedHat的朋友做了一张不错的图,来表明topic交换机是如何工作的: 

情景进入

Topic解决了我们另一个需求。举个例子,有一个做资讯的公司,他们会收集各种科技公司的动态并且第一时间转发出来。小编A负责小米公司,小编B负责华为公司,手工去搜索文章并且看标题是否匹配再进行转发是非常的低效的,可能小编们想要偷懒,写一个程序去各大网站进行爬数据,对于标题中含有小米的交给小编A,对于标题中含有华为的交给小编B。

代码块

发布者:

         /// <summary>
        /// Topic实现   模拟场景: 对于标题中含有小米的交给小编A,对于标题中含有华为的交给小编B。
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            var flag = true;
            while (flag)
            {
                Console.WriteLine("请输入要发布的消息key|msg");
                var msg = Console.ReadLine();
                if (msg != null && msg != "")
                    using (var channel = HelpConnection.GetConnection().CreateModel())
                    {
                        channel.ExchangeDeclare("TopicExchange", ExchangeType.Topic, true, false, null);
                        var msgs = msg.Split(‘|‘);
                        var body = Encoding.UTF8.GetBytes(msgs[1]);

                        Console.WriteLine("发布内容:键" + msgs[0]);
                        Console.WriteLine("发布内容:值" + msgs[1]);
                        channel.BasicPublish("TopicExchange", msgs[0], null, body);
                        Console.WriteLine("发布成功");
                    }
                else {
                    flag = true;
                }
            }
            Console.ReadKey();
        }

消费端

  /// <summary>
        /// Topic实现   模拟场景: 对于标题中含有小米的交给小编A,对于标题中含有华为的交给小编B。
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            bool flag = true;
            var key = "";
            while (flag)
            {
                Console.WriteLine("请输入路由正则, .代表字符,*代表零到多个字符");
                key = Console.ReadLine();
                if (string.IsNullOrWhiteSpace(key))
                {
                    Console.Write("请输入路由");
                    flag = true;
                }
                else
                {
                  //  flag = false;
                    using (var channel = HelpConnection.GetConnection().CreateModel())
                    {
                        var queueName = key + "Queue";

                        channel.ExchangeDeclare("TopicExchange", ExchangeType.Topic, true, false, null);

                        channel.QueueDeclare(queueName, true, false, false, null);

                        channel.QueueBind(queueName, "TopicExchange", key, null);

                        var consumer = new EventingBasicConsumer(channel);

                        consumer.Received += (mode, e) =>
                        {
                            var body = Encoding.UTF8.GetString(e.Body);

                            Console.WriteLine("显示内容:" + body);
                        };
                        channel.BasicConsume(queueName, true, consumer);
                        Console.ReadKey();
                    }
                }
            }
        }

效果图

  • 博主是利用读书、参考、引用、抄袭、复制和粘贴等多种方式打造成自己的纯镀 24k 文章,请原谅博主成为一个无耻的文档搬运工!
  • 小弟刚迈入博客编写,文中如有不对,欢迎用板砖扶正,希望给你有所帮助。
时间: 2024-11-01 03:14:13

RabbitMQ八:交换机类型Exchange Types--Topic介绍的相关文章

RabbitMQ各种交换机类型Exchange Types介绍

最新版本的RabbitMQ有四种交换机类型,分别是Direct exchange.Fanout exchange.Topic exchange.Headers exchange. 一.Direct Exchange 它处理路由键.需要将一个队列绑定到交换机上,要求该消息与一个特定的路由键完全匹配.这是一个完整的匹配.如果一个队列绑定到该交换机上要求路由键 “dog”,则只有被标记为“dog”的消息才被转发,不会转发dog.puppy,也不会转发dog.guard,只会转发dog. 二.Fanou

RabbitMQ的交换机类型(三)

RabbitMQ的交换机类型共有四种,是根据其路由过程的不同而划分成的 分别是Direct Exchange(直连交换机), Fanout Exchange(扇型交换机), Topic Exchange(主题交换机)与 Headers Exchange(头交换机) 以下是四种交换机的路由图及详解. Direct Exchange(直连交换机):将一个名为Q的消息队列与某个名为D的直连交换机通过值为R的路由键绑定在一起,当一个Msg和路由键R发送到直连交换机D上时,直连交换机D会把Msg根据路由键

RabbitMQ之交换机及spring整合

交换机 交换机属性: Name:交换机名称 Type:交换机类型 direct.topic.fanout.headers Durability:是否需要持久化,true为持久化 Auto Delete:当最后一个绑定到Exchange上的队列删除后,自动删除该Exchange Internal:当前Exchange是否用于RabbitMQ内部使用,默认为False Arguments:扩展参数,用于扩展AMQP协议,定制化使用 直流交换机 直连交换机Direct Exchange(完全匹配路由k

RabbitMQ系列 第六篇:Topic类型的exchange

在上篇博文中,我们对之前的日志系统做了稍许的完善.没有使用fanout类型的exchange来广播,而是使用了direct类型的exchange来选择性的接收日志消息. 尽管使用了direct类型的exchange对日志系统有所提升,但还是有一些限制(消息不能够基于多重因素来路由). 在我们的日志系统中,希望不仅仅能够根据日志级别来订阅,还可以根据指定的routing key来订阅.你应该可以理解的,就如unix的系统日志工具,日志消息路由规则不仅仅基于日志级别(info/warn/crit…)

django字段类型(Field types)介绍

字段类型(Field types) AutoField 它是一个根据 ID 自增长的 IntegerField 字段.通常,你不必直接使用该字段.如果你没在别的字段上指定主 键,Django 就会自动添加主键字段. BigIntegerField 64位整数,类似于IntegerField,范围从-9223372036854775808 到9223372036854775807.默认的form widget 是TextInput. BooleanField 一个布尔值(true/false)字段

The Swift Programming Language-官方教程精译Swift(5)集合类型 -- Collection Types

Swift语言提供经典的数组和字典两种集合类型来存储集合数据.数组用来按顺序存储相同类型的数据.字典虽然无序存储相同类型数据值但是需要由独有的标识符引用和寻址(就是键值对). Swift语言里的数组和字典中存储的数据值类型必须明确. 这意味着我们不能把不正确的数据类型插入其中. 同时这也说明我们完全可以对获取出的值类型非常自信. Swift对显式类型集合的使用确保了我们的代码对工作所需要的类型非常清楚,也让我们在开发中可以早早地找到任何的类型不匹配错误. 注意: Swift的数组结构在被声明成常

各种常见的交换机接口及连接方法介绍

各种交换机接口及连接方法介绍 1.常用交换机接口 1.1  RJ-45接口 这种接口就是我们现在最常见的网络设备接口,俗称"水晶头",专业术语为RJ-45连接器,属于双绞线以太网接口类型.RJ-45插头只能沿固定方向插入,设有一个塑料弹片与RJ-45插槽卡住以防止脱落. 这种接口在10Base-T以太网.100Base-TX以太网.1000Base-TX以太网中都可以使用,传输介质都是双绞线,不过根据带宽的不同对介质也有不同的要求,特别是1000Base-TX千兆以太网连接时,至少要使

Swift学习笔记 - 教程学习三 集合类型 (Collection Types)

集合类型 (Collection Types) 本节及前面用到的for…in句型在后面的循环控制部分,if let 见基础篇.如果某些字符看不到,请到博客园来看原文.——新波 Swift提供了三种基本集合类型,数组(array).集合(set)和字典(dictionary).数组是一组按序排列的数据,集合是一组各不相同的无序数据,字典是一组与关键值相关联的无序数据.参见下图. 3.1 集合的可变性Mutability of Collections 与前面的字符串一样,赋值给变量的集合是可变的,赋

&nbsp; CCNA实验十八交换机的端口安全 &nbsp;

CCNA实验十八交换机的端口安全 环境:Windows XP .Packet Tracer 3.5 目的: 懂得如何保护交换机端口安全. 说明: 保护交换机端口有三种方法:(注意交换机端口安全只能在access接口配置) (1)       限制交换机端口的最大连接数,最大连接数的取值是1-128. (2)       交换机端口进行MAC地址绑定 (3)       交换机端口进行IP地址绑定(要在三层设备上配置) 产生安全违例的处理方式: (1)       protect 当安全地址个数已