RabbitMQ 在.Net 中的使用
RabbitMQHelper
- public static class RabbitMQHelper
- {
- // 定义 RabbitMQ 基本参数
- private static string HostName = "127.0.0.1";
- private static int Port = ;
- private static string UserName = "admin";
- private static string Password = "admin";
- private static byte[] ToBytes(string str) => Encoding.UTF8.GetBytes(str);
- /// <summary>
- /// 设置交换机
- /// </summary>
- /// <param name="exchange">交换机名称</param>
- /// <param name="type">direct fanout headers topic</param>
- public static void SetExchange(string exchange, string type)
- {
- using (var channel = BuildChannel())
- {
- channel.ExchangeDeclare(exchange, type, true, false);
- }
- }
- /// <summary>
- /// 设置队列
- /// </summary>
- /// <param name="queue">队列名称</param>
- /// <param name="exchange">交换机</param>
- public static void SetQueue(string queue, string exchange)
- {
- using (var channel = BuildChannel())
- {
- //定义队列名称 持久化:是
- channel.QueueDeclare(queue, true, false, false, null);
- // 绑定队列
- channel.QueueBind(queue, exchange, queue, null);
- }
- }
- /// <summary>
- /// 设置队列
- /// </summary>
- /// <param name="queues">队列集合</param>
- /// <param name="exchange">交换机</param>
- public static void SetQueue(List<string> queues, string exchange)
- {
- using (var channel = BuildChannel())
- {
- foreach (var queue in queues)
- {
- //定义队列名称 持久化:是
- channel.QueueDeclare(queue, true, false, false, null);
- // 绑定队列
- channel.QueueBind(queue, exchange, queue, null);
- }
- }
- }
- /// <summary>
- /// 发布
- /// </summary>
- /// <param name="exchange">交换机</param>
- /// <param name="queue">队列</param>
- /// <param name="message">消息体</param>
- public static void Publish(string exchange, string queue, string message)
- {
- using (var channel = BuildChannel())
- {
- channel.BasicPublish(exchange, queue, null, ToBytes(message));
- }
- }
- /// <summary>
- /// 订阅
- /// </summary>
- /// <param name="queue">队列</param>
- /// <param name="func">func</param>
- public static void Subscribe(string queue, Func<string, bool> func)
- {
- var channel = BuildChannel();
- //事件基本消费者
- EventingBasicConsumer consumer = new EventingBasicConsumer(channel);
- //接收到消息事件
- consumer.Received += (ch, ea) =>
- {
- var message = Encoding.UTF8.GetString(ea.Body);
- func.Invoke(message);
- //Task.Run( () => { func.Invoke(message); });
- //确认该消息已被消费
- channel.BasicAck(ea.DeliveryTag, false);
- };
- //启动消费者 设置为手动应答消息
- channel.BasicConsume(queue, false, consumer);
- }
- private static IModel BuildChannel()
- {
- return new ConnectionFactory()
- {
- HostName = HostName,
- Port = Port,
- UserName = UserName,
- Password = Password
- }.CreateConnection().CreateModel();
- }
- }
具体使用
- class Program
- {
- static void Main(string[] args)
- {
- //初始化交换机
- RabbitMQHelper.SetExchange("ServerDirect", "direct");
- // 初始化队列
- RabbitMQHelper.SetQueue("LogCenter", "ServerDirect");
- RabbitMQHelper.SetQueue("SMSCenter", "ServerDirect");
- RabbitMQHelper.SetQueue("EmailCenter", "ServerDirect");
- //发布消息
- for (int i = ; i < ; i++)
- {
- RabbitMQHelper.Publish("ServerDirect", "LogCenter", "log"+i);
- }
- RabbitMQHelper.Publish("ServerDirect", "SMSCenter", "sms111111111");
- Console.ReadKey();
- }
- }
RabbitMQ 在.Net 中的使用的更多相关文章
- rabbitmq在ios中实战采坑
1. rabbitmq在ios中实战采坑 1.1. 问题 ios使用rabbitmq连接,没过多久就断开,并报错.且用android做相同的步骤并不会报错,错误如下 Received connecti ...
- ServiceStack.RabbitMQ在站点中使用时导致静态页面无法正常解析
当站点中集成ServiceStack.RabbitMQ时快速处理异步请求时,官方建议初始化如下: public class AppHost : AppHostHttpListenerBase { pu ...
- RabbitMQ在java中基础使用
RabbitMQ相关术语: 1.Broker:简单来说就是消息队列服务器实体. 2.Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列. ...
- 案例源码解读及思路:RabbitMQ在springboot中的配置
程序员的高级之处不是什么都会,而是对自己不会的进行抽象,然后完成自己的工作.比如对于RabbitMQ,按照字面理解,就将其看成Message Queue,也就是用来容纳对象的集合.很多功能都拆分给一个 ...
- RabbitMQ在分布式系统中的应用
怎么保证可靠性的? RabbitMQ提供了几种特性,牺牲了一点性能代价,提供了可靠性的保证. 持久化当RabbitMQ退出时,默认会将消息和队列都清除,所以需要在第一次声明队列和发送消息时指定其持久化 ...
- Redis和RabbitMQ在项目中的使用
一:Redis的使用 1.先引入pom.xml的依赖 <dependency> <groupId>redis.clients</groupId> <artif ...
- RabbitMQ 在 C# 中简单应用
RabbitMQ是什么及如何安装就不再赘述,百度一下就知道了,只是在配置方面要多加注意. 话不多说,先直接上一个简示例代码 发送端: ConnectionFactory factory = new C ...
- rabbitmq在storm中使用
storm中只能进行任务计算,不能保存中间结果,最后结果. 这就有一个需求,保存计算结果,最好还是分布式的,因为storm也是分布式,大数据计算. 流行的分布式计算中使用队列保存数据居多. kafka ...
- RabbitMQ之项目中实战
说了那么多,还不是为了在项目中进行实战吗,在实践中检验真理,不然我学他干嘛,不能解决项目中的实际问题的技术都是耍流氓... 一.后台管理系统发送消息 瞎咧咧:后台管理系统发送消息到交换机中,然后通知其 ...
- rabbitmq在kubernetes中持久化集群部署
背景 Javashop电商系统的消息总线使用的事rabbitmq,在订单创建.静态页生成.索引生成等等业务中大量采用异步消息系统,这个对于mq高可用的要求有两个重要的考量: 1.集群化 2.可扩容 3 ...
随机推荐
- 【10分钟学Spring】:@Profile、@Conditional实现条件化装配
根据不同的环境来装配不同的bean 企业级开发中,我们一般有多种环境,比如开发环境.测试环境.UAT环境和生产环境.而系统中有些配置是和环境强相关的,比如数据库相关的配置,与其他外部系统的集成等. 如 ...
- 白话OAuth2用户认证及鉴权标准流程
一.OAuth2需求场景 在说明OAuth2需求及使用场景之前,需要先介绍一下OAuth2授权流程中的各种角色: 资源拥有者(User) - 指应用的用户 认证服务器 (Authorization S ...
- layui中formSelects的使用
1.下载 下载地址:https://github.com/hnzzmsf/layui-formSelects 2. 引入 //引入formSelects.css <link rel=" ...
- luogu P4677 山区建小学 |dp
题目描述 政府在某山区修建了一条道路,恰好穿越总共nnn个村庄的每个村庄一次,没有回路或交叉,任意两个村庄只能通过这条路来往.已知任意两个相邻的村庄之间的距离为did_idi(为正整数),其中,0& ...
- luogu P2783 有机化学之神偶尔会做作弊 |Tarjan+LCA
题目背景 XS中学化学竞赛组教练是一个酷爱炉石的人. 有一天他一边搓炉石一边监考,而你作为一个信息竞赛的大神也来凑热闹. 然而你的化竞基友却向你求助了. "第1354题怎么做"&l ...
- mininet(三)简单的NAT实验
mininet(一)实验环境搭建 mininet(二)简单的路由实验 mininet(三)简单的NAT实验 本次实验拓扑图如下: 假设 Openvswitch switch1是一个带有NAT功能的路由 ...
- 压缩感知重构算法之SP算法python实现
压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...
- Selenium 4 Python的最佳测试框架
随着Python语言的使用越来越流行,基于Python的测试自动化框架也越来越流行.在项目选择最佳框架时,开发人员和测试人员会有些无法下手.做出选择是应该判断很多事情,框架的脚本质量,测试用例的简单性 ...
- 【Web技术】400- 浅谈Shadow DOM
编者按:本文作者:刘观宇,360 奇舞团高级前端工程师.技术经理,W3C CSS 工作组成员. 为什么会有Shadow DOM 你在实际的开发中很可能遇到过这样的需求:实现一个可以拖拽的滑块,以实现范 ...
- QEMU让你无需开发板即可玩溜RT-Thread~
1.1 本文的目的和背景 嵌入式软件开发离不开开发板,在没有物理开发板的情况下,可以使用QEMU等类似的虚拟机来模拟开发板.QEMU是一个支持跨平台虚拟化的虚拟机,它可以虚拟很多开发板.为了方便大家在 ...