tnblog
首页
视频
资源
登录

.netcore3.1 RabbitMq Topics交换机

5004人阅读 2021/1/26 15:52 总访问:3465192 评论:0 收藏:0 手机
分类: RabbitMq

.netcore3.1 RabbitMq Topics交换机

Topic Exchange介绍

发送到topic交换机的消息不能具有任意的 routing_key -它必须是单词列表,以点分隔。这些词可以是任何东西,但通常它们指定与消息相关的某些功能。一些有效的路由关键示例。一些有效的路由关键示例:stock.usd.nysenyse.vmwquick.orange.rabbit。路由关键字中可以包含任意多个单词,最多255个字节。

* (星号) 可以代替一个单词。
# (哈希) 可以替代零个或多个单词。

我们用一个简单的例子来做解释:

在此示例中,我们将发送所有描述地址的消息。将使用包含三个词(两个点)的路由密钥发送消息。路由键中的第一个单词将描述市名,第二个是区域名,第三个是地点名:<市名>.<区域名>.<地点名>

我们创建了三个绑定:匹配区域队列与绑定键*.南岸区.*绑定,匹配市名和地点队列*.*.弹子石重庆市.#绑定。

大概我会列举几个消息然后会进入队列的消息如下所示:

Topic Exchange创建

  1. var factory = new ConnectionFactory()
  2. {
  3. HostName = "47.98.187.188",
  4. UserName = "bob",
  5. Password = "bob"
  6. };
  7. // 创建一个链接
  8. using (var connection = factory.CreateConnection())
  9. {
  10. // 创建一个通道
  11. using (var channel = connection.CreateModel())
  12. {
  13. channel.ExchangeDeclare(exchange: "MyTopicExchange", ExchangeType.Topic, true, false);
  14. var routingKey = (args.Length > 0) ? args[0] : "重庆市.南岸区.弹子石";
  15. var message = (args.Length > 1) ? string.Join(" ", args.Skip(1).ToArray()) : "Hello World!";
  16. var body = Encoding.UTF8.GetBytes(message);
  17. var properties = channel.CreateBasicProperties();
  18. properties.Persistent = true;
  19. channel.BasicPublish(exchange: "MyTopicExchange", routingKey, properties, body);
  20. Console.WriteLine(" [x] Sent '{0}':'{1}'", routingKey, message);
  21. }
  22. }

Topic 队列的创建与消费

  1. var factory = new ConnectionFactory()
  2. {
  3. HostName = "47.98.187.188",
  4. UserName = "bob",
  5. Password = "bob"
  6. };
  7. Console.WriteLine("Please enter a queue name:");
  8. // MyTopicExchange1 MyTopicExchange2
  9. string queuename = Console.ReadLine();
  10. // 创建一个链接
  11. using (var connection = factory.CreateConnection())
  12. {
  13. // 创建一个通道
  14. using (var channel = connection.CreateModel())
  15. {
  16. channel.ExchangeDeclare(queuename, ExchangeType.Topic, true, false);
  17. // 声明一个队列
  18. channel.QueueDeclare(
  19. queue: queuename,
  20. durable: true,
  21. exclusive: false,
  22. autoDelete: false,
  23. arguments: null);
  24. foreach (var bindingKey in args)
  25. {
  26. // 绑定队列相关正则匹配
  27. channel.QueueBind(queuename, "MyTopicExchange", bindingKey);
  28. }
  29. // 创建消费实例
  30. var consumer = new EventingBasicConsumer(channel);
  31. // 事件在交付到使用者时触发。(消费处理事件)
  32. consumer.Received += (model, ea) =>
  33. {
  34. string EventQueueName = queuename;
  35. var body = ea.Body.ToArray();
  36. var message = Encoding.UTF8.GetString(body);
  37. Console.WriteLine($" RountingKey: {ea.RoutingKey} Queue:{EventQueueName} Message: {message}");
  38. // 手动确认
  39. channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: true);
  40. };
  41. // 绑定到队列中去
  42. channel.BasicConsume(queue: queuename, autoAck: false, consumer: consumer);
  43. Console.ReadLine();
  44. }
  45. }

运行结果


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

rabbitmq官网上六大版块之二(Direct类型交换机通过routingKey分类型输出)

其实rabbitmq,老师都说得差不多了,下面是老师的连接。http://www.tnblog.net/aojiancc2/article/UserCategory/134官网教...

rabbitmq六大版块之三(Fanout类型交换机相同数据多逼格处理)

Fanout类型交换机的特点是:同样的数据分发给每一个自己所绑定的队列,每个队列可以按照自己的需求对数据进行不同的处理【...

rabbitmq中Header类型交换机的处理(and与or的处理)

headers类型交换机是通过 muliple attributes 代替 routing key.x-match [all/any]all: 所有地方header头信息必须匹配any:...

mq交换机的各种类型

《1》Message TTL (1) Queue TTL =》 给队列中的所有消息限定一个时间 (2) Message TTL =》 给队列中指定的消息限定一个时...

.netcore3.1 RabbitMq Fanout交换机

.netcore3.1 RabbitMq Fanout交换机[TOC] 在前面我们有提到交换机但都是用的普通的交换机(direct),交换机在Rabbitmq中有...

.netcore3.1 RabbitMq Header交换机

.netcore3.1 RabbitMq Header交换机[TOC] 标头交换机指在用于在多个属性上路由,这些属性比路由键更容易表示为消息标头...

路由器与交换机的概念和区别

前言:各位看官老爷,大家早上好 俺是小付童鞋 今天和大家浅谈一下路由和交换机之间的连续。如有讲解错误的地方还请各位大佬...

net core 使用 EF Code First

下面这些内容很老了看这篇:https://www.tnblog.net/aojiancc2/article/details/5365 项目使用多层,把数据库访问...

.net mvc分部页,.net core分部页

.net分部页的三种方式第一种:@Html.Partial(&quot;_分部页&quot;)第二种:@{ Html.RenderPartial(&quot;分部页&quot;);}...

StackExchange.Redis操作redis(net core支持)

官方git开源地址https://github.com/StackExchange/StackExchange.Redis官方文档在docs里边都是官方的文档通过nuget命令下...

.net core 使用session

tip:net core 2.2后可以直接启用session了,不用在自己添加一次session依赖,本身就添加了使用nuget添加引用Microsoft.AspN...

通俗易懂,什么是.net?什么是.net Framework?什么是.net core?

朋友圈@蓝羽 看到一篇文章写的太详细太通俗了,搬过来细细看完,保证你对.NET有个新的认识理解原文地址:https://www.cnblo...

asp.net core2.0 依赖注入 AddTransient与AddScoped的区别

asp.net core主要提供了三种依赖注入的方式其中AddTransient与AddSingleton比较好区别AddTransient瞬时模式:每次都获取一...

.net core 使用 Kestrel

Kestrel介绍 Kestrel是一个基于libuv的跨平台web服务器 在.net core项目中就可以不一定要发布在iis下面了Kestrel体验可以使...

net core中使用cookie

net core中可以使用传统的cookie也可以使用加密的cookieNET CORE中使用传统cookie设置:HttpContext.Response.Cookies.Appe...
这一世以无限游戏为使命!
排名
2
文章
633
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术