EasyNetQ操作RabbitMQ

EasyNetQ 是一个容易使用,专门针对RabbitMQ的 .NET API。EasyNetQ是为了提供一个尽可能简洁的适用与RabbitMQ的.NET类库。

下面看下怎么集成。

1、nuget 安装

28ae076409321fc55e86000273ae4305.png2、配置连接串

public static IBus CreateMessageBus(){// 消息服务器连接字符串var connectionString = ConfigurationManager.ConnectionStrings["RabbitMQConnString"];if (connectionString == null || connectionString.ConnectionString == string.Empty){throw new Exception("messageserver connection string is missing or empty");}return RabbitHutch.CreateBus(connectionString.ConnectionString);}

3、这边我们构建一个消息体

/// <summary>/// 消息类实体/// </summary>[Serializable]public class RabbitMQ_Message{public RabbitMQ_Message(){MessageID = DateTime.Now.Ticks.ToString();}/// <summary>/// 消息id/// </summary>public string MessageID { get; set; }/// <summary>/// 消息标题/// </summary>public string MessageTitle { get; set; }/// <summary>/// 消息内容/// </summary>public string MessageBody { get; set; }/// <summary>/// 消息管道/// </summary>public RabbitMessageRouterEnum MessageRouter { get; set; }/// <summary>/// 游客id/// </summary>public int customerId { get; set; }/// <summary>/// 标示代码 0:正确/// </summary>public ResponseStatus result { get; set; }/// <summary>/// 消息类型/// </summary>public SuperSocketMessageTypeEnum superSocketMessageType { get; set; }/// <summary>/// 消息过期时间(毫秒)/// </summary>public int expiredMillSeconds { get; set; }}

4、发送消息

/// <summary>/// 发送消息/// </summary>public static void Publish(RabbitMQ_Message msg){创建消息busIBus bus = null;try{创建消息busbus = BusBuilder.CreateMessageBus();bus.Publish(msg, x =>{x.WithTopic($"{msg.MessageRouter.ToDescription()}.{msg.customerId}");if (msg.expiredMillSeconds > 0){x.WithExpires(msg.expiredMillSeconds);}});//通过管道发送消息               LogExtention.getInstance().WriteCustomLogAsync(msg, "RabbitMQ消息发送", "MQHelperPublish");}catch (EasyNetQException ex){LogExtention.getInstance().ErrorAsync(ex, "RabbitMQ--MQHelper--Publish发布消息时出错");//处理连接消息服务器异常 }finally{if (bus != null){bus.Dispose();//与数据库connection类似,使用后记得销毁bus对象}               }}

4、接收消息

/// <summary>/// 接收消息/// </summary>/// <param name="msg"></param>public static ISubscriptionResult Subscribe(RabbitMQ_Message msg, IProcessMessage ipro){创建消息busIBus bus = null;try{bus = BusBuilder.CreateMessageBus();//subscriptionId设置不同的话,每一个subscriptionId都会收到相同的消息,下面的写法只会有一个接收者var subscriptionResult = bus.Subscribe<RabbitMQ_Message>(msg.MessageRouter.ToDescription(), message => ipro.ProcessMsg(message),x => x.WithQueueName(msg.customerId.ToString()).WithTopic($"{msg.MessageRouter.ToDescription()}.{msg.customerId}"));//subscriptionResult.Dispose();//取消订阅return subscriptionResult;}catch (EasyNetQException ex){LogExtention.getInstance().ErrorAsync(ex, "RabbitMQ--MQHelper--Subscribe订阅消息时出错");//处理连接消息服务器异常 }finally{if (bus != null){bus.Dispose();//与数据库connection类似,使用后记得销毁bus对象}}return null;}
7e2c8cf1c890a09cfdf645080dc6a594.png

在EasyNetQ中如果需要生产者确认功能,则需要在Rabbitmq的连接配置中设置publisherConfirms=true,这将会开启自动确认。在使用高级api定义交换机和队列时可以自己定义多种参数,比如消息是否持久化,消息最大长度等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/294614.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

男人穿女友的丝袜,只有0次和无数次....

全世界只有3.14 % 的人关注了爆炸吧知识男人爱穿丝袜是刻在基因里的今天是上班第二天&#xff0c;想必很多模友都还没有进入状态&#xff0c;所以超模君准备了一波奇奇怪怪的知识&#xff0c;给各位模友提提神。咱们要讲的&#xff0c;是一种让不少直男听了老脸一红的贴身衣物—…

使用gulp-connect实现web服务器

安装插件安装gulp-connect插件&#xff0c;安装命令如下 npm install --save-dev gulp-connect 定义web服务&#xff0c;gulpfile.js代码 var gulp require(gulp),connect require(gulp-connect), //实现web服务器插件gulp.task(default, function() { });//使用connect实现w…

Android之基于xmpp openfire smack开发之openfire介绍和部署[1]

http://blog.csdn.net/forlong401/article/details/33730365 前言 Java领域的即时通信的解决方案可以考虑openfiresparksmack。当然也有其他的选择。 Openfire是基于Jabber协议(XMPP)实现的即时通信服务器端版本&#xff0c;目前建议使用3.8.1版本&#xff0c;这个版本是当前最…

mysql对null排序_mysql中null值的排序问题分析_MySQL

bitsCN.commysql中null值的排序问题分析如下表t_user&#xff1a;name agezhangsan 1lisi NULLwangwu 2执行一下sql&#xff1a;Sql代码select * from t_user order by age;name agelisi NULLzhangsan 1wangwu 2实际上我们是想将没有填写age的记录放在最后&#xff0c;我们可以…

1988-B. 有序集合

描述 在C里&#xff0c;有一个神奇的东西&#xff0c;叫做STL&#xff0c;这里提供了很多简单好用的容器&#xff0c;用来实现常用又很难书写的数据结构&#xff0c;如栈&#xff08;stack&#xff09;等。其中&#xff0c;有一个容器叫set&#xff0c;译作“有序集合”。首先&…

silverlight中数据绑定讲解

2019独角兽企业重金招聘Python工程师标准>>> 下面我们开始讲解silverlight中一个比较重要的知识——数据绑定。 我们对于数据绑定并不陌生&#xff0c;在我们ASP.NET中就涉及到了数据绑定&#xff0c;像我们之前学的DataList&#xff0c;GridView&#xff0c;repeat…

恋爱后能有多认真?

1 北方孩子有起床困难户吗&#xff1f;▼2 如果我有10万死士&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼3 只有小天才手表&#xff08;素材来源豆瓣&#xff0c;侵删&#xff09;▼4 给你一万刀&#xff0c;扇你的好朋友▼5 这才是一个模特该有的身材&#xf…

.NET 6 新特性 PeriodicTimer

.NET 6 新特性 PeriodicTimerIntro.NET 6 中引入了一个新的 Timer —— System.Threading.PeriodicTimer&#xff0c;和之前的几个 Timer 相比一个最大的区别就是&#xff0c;新的 PeriodicTimer 的事件处理可以比较方便地使用异步方式&#xff0c;消除了使用 callback 的机制…

Android之基于xmpp openfire smack开发之smack类库介绍和使用[2]

http://blog.csdn.net/shimiso/article/details/8816540 关于Smack编程库&#xff0c;前面我们提到&#xff0c;它是面向Java端的api&#xff0c;主要在PC上使用&#xff0c;利用它我们可以向openfire服务器注册用户&#xff0c;发送消息&#xff0c;并且可以通过监听器获得此…

团队介绍

团队成员&#xff1a;孙哲&#xff0c;何琳琳&#xff0c;张一博&#xff0c;李营成员特点&#xff1a;孙哲&#xff1a;我们组的核心力量&#xff0c;擅长编程&#xff0c;对C&#xff0c;Java都有很好的掌握&#xff0c;何琳琳&#xff1a;热爱学习&#xff0c;积极向上&…

简单明了区分escape、encodeURI和encodeURIComponent

一、前言 讲这3个方法区别的文章太多了&#xff0c;但是大部分写的都很绕。本文试图从实践角度去讲这3个方法。 二、escape和它们不是同一类 简单来说&#xff0c;escape是对字符串(string)进行编码(而另外两种是对URL)&#xff0c;作用是让它们在所有电脑上可读。编码之后的效…

python 线程 的类库_python类库32[多线程]

一 python 多线程因为CPython的实现使用了Global Interpereter Lock(GIL)&#xff0c;使得python中同一时刻只有一个线程在执行&#xff0c;从而简化了python解释器的实现&#xff0c;且python对象模型天然地线程安全。如果你想你的应用程序在多核的机器上使用更好的资源&#…

SQL Server 排序规则(摘)

3Sql Server数据库&#xff0c;在跨库多表连接查询时&#xff0c;若两数据库默认字符集不同&#xff0c;系统就会返回这样的错误&#xff1a;“无法解决equal to操作的排序规则冲突” 一、错误分析&#xff1a; 这个错误是因为排序规则不一致造成的&#xff0c;比如&#xff1…

当.NET遇到机器学习

微软中国MSDN 点击上方蓝字关注我们ML.NET 是面向 .NET 开发人员的开源跨平台机器学习框架&#xff0c;你可以使用 C# 或 F# 创建自定义 ML 模型&#xff0c;而无需离开.NET 生态系统。ML.NET 使你能够在联机或脱机场景中将机器学习添加到 .NET 应用程序中。借助此功能&#x…

当你和你女朋友闹矛盾时......

1 听起来是这么个道理&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼2 真的是非常专一了&#xff08;via.皎皎月当楼&#xff09;▼3 给朋友定做的蛋糕&#xff08;素材来源网络&#xff0c;侵删&#xff09;▼4 当你和女朋友闹矛盾时▼5 师范的男孩子有多害怕&a…

Android之基于xmpp openfire smack开发之Android客户端开发[3]

http://blog.csdn.net/shimiso/article/details/11225873 在上两篇文章中&#xff0c;我们依次介绍openfire部署以及smack常用API的使用&#xff0c;这一节中我们着力介绍如何基于asmack开发一个Android的客户端&#xff0c;本篇的重点在实践&#xff0c;讲解和原理环节&#…

imx6 i2c分析

本文主要分析&#xff1a;      1. i2c设备注册      2. i2c驱动注册      3. 上层调用过程参考&#xff1a;  http://www.cnblogs.com/helloworldtoyou/p/5126618.html1. i2c设备注册 kernel/arch/arm/mach-mx6/board-mx6q_sabresd.c …

Java原来如此-随机数

在Java中&#xff0c;生成随机数有两种方法。1是使用Random类。2是使用Math类中的random方法。 我们现在做个例子&#xff0c;比如生成20个0到10之间的随机数。 1.使用Random类的nextInt(n)方法&#xff0c;n代表0到n之间&#xff0c;包括0&#xff0c;不包括n。 Random random…

python列表双中括号_python – Pandas中双括号`[[…]]`和单括号`[....

考虑一下: 来源DF: In [79]: df Out[79]: Brains Bodies 0 42 34 1 32 23 选择一列 – 导致Pandas.Series: In [80]: df[Brains] Out[80]: 0 42 1 32 Name: Brains, dtype: int64 In [81]: type(df[Brains]) Out[81]: pandas.core.series.Series 选择DataFrame的子集 – 导致…

TableView详解

&#xff0d;、建立 UITableView DataTable [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 420)]; [DataTable setDelegate:self]; [DataTable setDataSource:self]; [self.view addSubview:DataTable]; [DataTable release]; 二、UITableView各Method说明 //Sec…