zoukankan      html  css  js  c++  java
  • 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 文章,请原谅博主成为一个无耻的文档搬运工!
    • 小弟刚迈入博客编写,文中如有不对,欢迎用板砖扶正,希望给你有所帮助。
  • 相关阅读:
    mysql索引及优化
    mysql5.5 uuid做主键与int做主键的性能实测
    php生成UUID
    Android 图片的裁剪与相机调用
    Android GPS 临近触发
    Android中GPS类及方法简介
    永久删除 tadb.exe
    linux服务器调整参数支持高并发
    隐藏nginx 版本号信息
    nginx 重写 rewrite 基础及实例
  • 原文地址:https://www.cnblogs.com/lrzr/p/7365731.html
Copyright © 2011-2022 走看看