RabbitMQHelper

  1. public static class RabbitMQHelper
  2. {
  3. // 定义 RabbitMQ 基本参数
  4.  
  5. private static string HostName = "127.0.0.1";
  6.  
  7. private static int Port = ;
  8.  
  9. private static string UserName = "admin";
  10.  
  11. private static string Password = "admin";
  12.  
  13. private static byte[] ToBytes(string str) => Encoding.UTF8.GetBytes(str);
  14.  
  15. /// <summary>
  16. /// 设置交换机
  17. /// </summary>
  18. /// <param name="exchange">交换机名称</param>
  19. /// <param name="type">direct fanout headers topic</param>
  20. public static void SetExchange(string exchange, string type)
  21. {
  22. using (var channel = BuildChannel())
  23. {
  24. channel.ExchangeDeclare(exchange, type, true, false);
  25. }
  26. }
  27.  
  28. /// <summary>
  29. /// 设置队列
  30. /// </summary>
  31. /// <param name="queue">队列名称</param>
  32. /// <param name="exchange">交换机</param>
  33. public static void SetQueue(string queue, string exchange)
  34. {
  35. using (var channel = BuildChannel())
  36. {
  37. //定义队列名称 持久化:是
  38. channel.QueueDeclare(queue, true, false, false, null);
  39.  
  40. // 绑定队列
  41. channel.QueueBind(queue, exchange, queue, null);
  42.  
  43. }
  44. }
  45.  
  46. /// <summary>
  47. /// 设置队列
  48. /// </summary>
  49. /// <param name="queues">队列集合</param>
  50. /// <param name="exchange">交换机</param>
  51. public static void SetQueue(List<string> queues, string exchange)
  52. {
  53. using (var channel = BuildChannel())
  54. {
  55. foreach (var queue in queues)
  56. {
  57. //定义队列名称 持久化:是
  58. channel.QueueDeclare(queue, true, false, false, null);
  59.  
  60. // 绑定队列
  61. channel.QueueBind(queue, exchange, queue, null);
  62.  
  63. }
  64.  
  65. }
  66. }
  67.  
  68. /// <summary>
  69. /// 发布
  70. /// </summary>
  71. /// <param name="exchange">交换机</param>
  72. /// <param name="queue">队列</param>
  73. /// <param name="message">消息体</param>
  74. public static void Publish(string exchange, string queue, string message)
  75. {
  76. using (var channel = BuildChannel())
  77. {
  78. channel.BasicPublish(exchange, queue, null, ToBytes(message));
  79. }
  80. }
  81.  
  82. /// <summary>
  83. /// 订阅
  84. /// </summary>
  85. /// <param name="queue">队列</param>
  86. /// <param name="func">func</param>
  87. public static void Subscribe(string queue, Func<string, bool> func)
  88. {
  89. var channel = BuildChannel();
  90.  
  91. //事件基本消费者
  92. EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
  93.  
  94. //接收到消息事件
  95. consumer.Received += (ch, ea) =>
  96. {
  97. var message = Encoding.UTF8.GetString(ea.Body);
  98.  
  99. func.Invoke(message);
  100.  
  101. //Task.Run( () => { func.Invoke(message); });
  102.  
  103. //确认该消息已被消费
  104. channel.BasicAck(ea.DeliveryTag, false);
  105.  
  106. };
  107.  
  108. //启动消费者 设置为手动应答消息
  109. channel.BasicConsume(queue, false, consumer);
  110.  
  111. }
  112.  
  113. private static IModel BuildChannel()
  114. {
  115. return new ConnectionFactory()
  116. {
  117. HostName = HostName,
  118. Port = Port,
  119. UserName = UserName,
  120. Password = Password
  121.  
  122. }.CreateConnection().CreateModel();
  123. }
  124.  
  125. }

具体使用

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. //初始化交换机
  6. RabbitMQHelper.SetExchange("ServerDirect", "direct");
  7.  
  8. // 初始化队列
  9. RabbitMQHelper.SetQueue("LogCenter", "ServerDirect");
  10. RabbitMQHelper.SetQueue("SMSCenter", "ServerDirect");
  11. RabbitMQHelper.SetQueue("EmailCenter", "ServerDirect");
  12.  
  13. //发布消息
  14.  
  15. for (int i = ; i < ; i++)
  16. {
  17. RabbitMQHelper.Publish("ServerDirect", "LogCenter", "log"+i);
  18. }
  19.  
  20. RabbitMQHelper.Publish("ServerDirect", "SMSCenter", "sms111111111");
  21.  
  22. Console.ReadKey();
  23. }
  24. }

RabbitMQ 在.Net 中的使用的更多相关文章

  1. rabbitmq在ios中实战采坑

    1. rabbitmq在ios中实战采坑 1.1. 问题 ios使用rabbitmq连接,没过多久就断开,并报错.且用android做相同的步骤并不会报错,错误如下 Received connecti ...

  2. ServiceStack.RabbitMQ在站点中使用时导致静态页面无法正常解析

    当站点中集成ServiceStack.RabbitMQ时快速处理异步请求时,官方建议初始化如下: public class AppHost : AppHostHttpListenerBase { pu ...

  3. RabbitMQ在java中基础使用

    RabbitMQ相关术语:          1.Broker:简单来说就是消息队列服务器实体.          2.Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列.      ...

  4. 案例源码解读及思路:RabbitMQ在springboot中的配置

    程序员的高级之处不是什么都会,而是对自己不会的进行抽象,然后完成自己的工作.比如对于RabbitMQ,按照字面理解,就将其看成Message Queue,也就是用来容纳对象的集合.很多功能都拆分给一个 ...

  5. RabbitMQ在分布式系统中的应用

    怎么保证可靠性的? RabbitMQ提供了几种特性,牺牲了一点性能代价,提供了可靠性的保证. 持久化当RabbitMQ退出时,默认会将消息和队列都清除,所以需要在第一次声明队列和发送消息时指定其持久化 ...

  6. Redis和RabbitMQ在项目中的使用

    一:Redis的使用 1.先引入pom.xml的依赖 <dependency> <groupId>redis.clients</groupId> <artif ...

  7. RabbitMQ 在 C# 中简单应用

    RabbitMQ是什么及如何安装就不再赘述,百度一下就知道了,只是在配置方面要多加注意. 话不多说,先直接上一个简示例代码 发送端: ConnectionFactory factory = new C ...

  8. rabbitmq在storm中使用

    storm中只能进行任务计算,不能保存中间结果,最后结果. 这就有一个需求,保存计算结果,最好还是分布式的,因为storm也是分布式,大数据计算. 流行的分布式计算中使用队列保存数据居多. kafka ...

  9. RabbitMQ之项目中实战

    说了那么多,还不是为了在项目中进行实战吗,在实践中检验真理,不然我学他干嘛,不能解决项目中的实际问题的技术都是耍流氓... 一.后台管理系统发送消息 瞎咧咧:后台管理系统发送消息到交换机中,然后通知其 ...

  10. rabbitmq在kubernetes中持久化集群部署

    背景 Javashop电商系统的消息总线使用的事rabbitmq,在订单创建.静态页生成.索引生成等等业务中大量采用异步消息系统,这个对于mq高可用的要求有两个重要的考量: 1.集群化 2.可扩容 3 ...

随机推荐

  1. 【10分钟学Spring】:@Profile、@Conditional实现条件化装配

    根据不同的环境来装配不同的bean 企业级开发中,我们一般有多种环境,比如开发环境.测试环境.UAT环境和生产环境.而系统中有些配置是和环境强相关的,比如数据库相关的配置,与其他外部系统的集成等. 如 ...

  2. 白话OAuth2用户认证及鉴权标准流程

    一.OAuth2需求场景 在说明OAuth2需求及使用场景之前,需要先介绍一下OAuth2授权流程中的各种角色: 资源拥有者(User) - 指应用的用户 认证服务器 (Authorization S ...

  3. layui中formSelects的使用

    1.下载 下载地址:https://github.com/hnzzmsf/layui-formSelects 2. 引入 //引入formSelects.css <link rel=" ...

  4. luogu P4677 山区建小学 |dp

    题目描述 政府在某山区修建了一条道路,恰好穿越总共nnn个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往.已知任意两个相邻的村庄之间的距离为did_idi​(为正整数),其中,0& ...

  5. luogu P2783 有机化学之神偶尔会做作弊 |Tarjan+LCA

    题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 有一天他一边搓炉石一边监考,而你作为一个信息竞赛的大神也来凑热闹. 然而你的化竞基友却向你求助了. "第1354题怎么做"&l ...

  6. mininet(三)简单的NAT实验

    mininet(一)实验环境搭建 mininet(二)简单的路由实验 mininet(三)简单的NAT实验 本次实验拓扑图如下: 假设 Openvswitch switch1是一个带有NAT功能的路由 ...

  7. 压缩感知重构算法之SP算法python实现

    压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...

  8. Selenium 4 Python的最佳测试框架

    随着Python语言的使用越来越流行,基于Python的测试自动化框架也越来越流行.在项目选择最佳框架时,开发人员和测试人员会有些无法下手.做出选择是应该判断很多事情,框架的脚本质量,测试用例的简单性 ...

  9. 【Web技术】400- 浅谈Shadow DOM

    编者按:本文作者:刘观宇,360 奇舞团高级前端工程师.技术经理,W3C CSS 工作组成员. 为什么会有Shadow DOM 你在实际的开发中很可能遇到过这样的需求:实现一个可以拖拽的滑块,以实现范 ...

  10. QEMU让你无需开发板即可玩溜RT-Thread~

    1.1 本文的目的和背景 嵌入式软件开发离不开开发板,在没有物理开发板的情况下,可以使用QEMU等类似的虚拟机来模拟开发板.QEMU是一个支持跨平台虚拟化的虚拟机,它可以虚拟很多开发板.为了方便大家在 ...