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

前言

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

Topic Exchange spa

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

情景进入blog

 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 文章,请原谅博主成为一个无耻的文档搬运工!
  • 小弟刚迈入博客编写,文中若有不对,欢迎用板砖扶正,但愿给你有所帮助。
相关文章
相关标签/搜索