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 ...
随机推荐
- 华为云EI人脸识别接口初探
0. 准备工作 开户及申请开通人脸识别服务,可以参考https://education.huaweicloud.com:8443/courses/course-v1:HuaweiX+CBUCNXE01 ...
- 转:Maven的默认中央仓库以及修改默认仓库&配置第三方jar包从私服下载
当构建一个Maven项目时,首先检查pom.xml文件以确定依赖包的下载位置,执行顺序如下: 1.从本地资源库中查找并获得依赖包,如果没有,执行第2步. 2.从Maven默认中央仓库中查找并获得依赖包 ...
- 用正则表达式来验证QQ号是否合法
import re #首先我们定义一个函数利用正则表达式来获取QQ号 def testQQ(qq): pattern = re.compile('[1-9][0-9]{4,10}$') result ...
- springboot整合thymleaf模板引擎
thymeleaf作为springboot官方推荐使用的模板引擎,简单易上手,功能强大,thymeleaf的功能和jsp有许多相似之处,两者都属于服务器端渲染技术,但thymeleaf比jsp的功能更 ...
- ASP.NET Core 选项模式源码学习Options IOptions(二)
前言 上一篇文章介绍IOptions的注册,本章我们继续往下看 IOptions IOptions是一个接口里面只有一个Values属性,该接口通过OptionsManager实现 public in ...
- IOS开发中制作属于自己的静态库.a、资源库.bundle、.framework
一.什么是库 库实际上是一种代码共享的方式,主要用于代码重用和源码隐藏,通常分为动态库和静态库. 静态库:链接时完整的拷贝至可执行文件中,被多次使用就有多份冗余拷贝. 动态库:链接时不复 ...
- 这些C++常用内置函数你会几个??
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:Regina520 新手注意:如果你C++学的不好,可以去拿我的C+ ...
- base64编码的字符串与图片相互转换
#region 图片转为base64编码的字符串---ImgToBase64String /// <summary> /// 图片转为base64编码的字符串 /// </summa ...
- 【JS】313- 复习 回流和重绘
点击上方"前端自习课"关注,学习起来~ 原文地址:我不是陈纪庚 segmentfault.com/a/1190000017329980 回流和重绘可以说是每一个web开发者都经常听 ...
- Newman
目录 简介 安装 使用 简介 Newman是为postman而生,专门用来运行postman编写好的脚本 使用Newman,你可以很方便的用命令行来执行postman collections Newm ...