前言

上一章节,我们说了两个类型,本章我们说一下其三: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[]); Console.WriteLine("发布内容:键" + msgs[]);
Console.WriteLine("发布内容:值" + msgs[]);
channel.BasicPublish("TopicExchange", msgs[], 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 文章,请原谅博主成为一个无耻的文档搬运工!
  • 小弟刚迈入博客编写,文中如有不对,欢迎用板砖扶正,希望给你有所帮助。

最新文章

  1. SVN 提交失败: permission denied - txn-current-lock
  2. 怎么计算一个具体InnoDB的索引大小
  3. C 内存管理初步了解
  4. QT 环境下开发socketCan接口程序
  5. [Jobdu] 题目1506:求1+2+3+...+n
  6. 【四】注入框架RoboGuice使用:(Your First System Service Injection)
  7. IBM芯片新功能:诊断癌症
  8. mshta 反弹shell
  9. java碎笔
  10. day08 文件操作
  11. java之LinkedList详细介绍
  12. mysql_union操作符
  13. 在function module 中向数据库插入数据
  14. 雷林鹏分享:C# 字符串(String)
  15. 洛谷 P1823 音乐会的等待
  16. java为什么有些异常throw出去需要在函数头用throws声明,一些就不用。
  17. 【NIFI】 开发自定义Nifi Processor
  18. iterms 快捷键
  19. MiZ702学习笔记11——如何使用vivado isim仿真
  20. 2-nginx 安装

热门文章

  1. YTU 2427: C语言习题 整数排序
  2. python读取一个英文文件,并记录每个单词出现的次数,降序输出
  3. 一步一步学Silverlight 2系列文章
  4. 用JS或jQuery访问页面内的iframe
  5. JS截取与分割字符串常用技巧总结
  6. js获取form的方法
  7. SPOJ:Lexicographically Smallest(并查集&amp;排序)
  8. UVaLive 7454 Parentheses (水题,贪心)
  9. h.264的POC计算(转载)
  10. 解决Excel打开UTF-8编码CSV文件乱码的问题