撑持.Net Core(2.0及以上)/.Net Framework(4.5及以上),能够摆设在Docker, Windows, Linux, Mac。

RabbitMQ做为一款支流的动静队列东西早已广受欢送。比拟于其它的MQ东西,RabbitMQ撑持的语言更多、功用更完美。

本文供给一种市道上最/极简单的利用RabbitMQ的体例,只需要会挪用以下三个办法,你就几乎能够掌握整个RabbitMQ的利用:

(1)SendMessage,发送一个动静

(2)GetMessage,获取一个动静

(3)UseMessage,利用一个动静(持续利用)

为了挪用以上三个办法,起首需要从NuGet引用DeveloPErSharp.RabbitMQ包,并在App.config/Web.config里面添加如下设置装备摆设(.NET6 / VS2022中已有App.config那个单项添加):

<appSettings> <add key="RabbitMQConnectionString" value="hostName=135.208.12.236,port=5672,userName=sa,password=aevin.gang" /> </appSettings>

申明:上述设置装备摆设平分别设置了RabbitMQ应用所在的办事器IP地址hostName、端口port、用户名userName、密码password(请把那四项的对应值修改成你本身那边的RabbitMQ的对应值)

下面,我们给出一个利用了上述SendMessage、GetMessage、UseMessage三个办法的示例。该示例的功用申明如下:

先向RabbitMQ办事器上名为“aa”的队列发送了5个动静,然后从RabbitMQ办事器上的“aa”队列中获取,并打印出第1个动静,最初再持续从RabbitMQ办事器上的“aa”队列中获取剩余4个动静,并把它们写入名为fj.txt的文件。

代码如下:

NET为什么保举它做为RabbitMQ动静队列的首选开发东西  第1张

using DeveloperSharp.RabbitMQ;-------------------------- static void Main(string[] args) { //发送5个动静(利用SendMessage) RabbitMQHelper.SendMessage("aa", "世界1,你好!"); RabbitMQHelper.SendMessage("aa", "世界2,你好!"); RabbitMQHelper.SendMessage("aa", "世界3,你好!"); RabbitMQHelper.SendMessage("aa", "世界4,你好!"); RabbitMQHelper.SendMessage("aa", "世界5,你好!"); //获取1个动静(利用GetMessage) string OneMessage = RabbitMQHelper.GetMessage("aa").Message; Console.WriteLine(OneMessage); //向fj.txt那个文本文件中写入剩余的4个动静(利用UseMessage) RabbitMQHelper.UseMessage("aa", t => { System.IO.File.AppendAllText("D:/fj.txt", t.Message); return true; }); }NET为什么保举它做为RabbitMQ动静队列的首选开发东西  第2张

运行成果如下:

【控造台显示出】:世界1,你好!

【fj.txt文件中显示出】:世界2,你好!世界3,你好!世界4,你好!世界5,你好!

三个办法的详细功用申明(辅助参考):

NET为什么保举它做为RabbitMQ动静队列的首选开发东西  第3张

(1)发送一个动静void SendMessage(string QueueName, string Message, Dictionary<string, object> Header = null)(2)获取一个动静RabbitMQMessage GetMessage(string QueueName)(3)利用一个动静(持续利用)void UseMessage(string QueueName, Func<RabbitMQMessage, bool?> Use)附加申明: (I)Use返回值为true时,代表当前动静已被有效处置并会被办事器删除。然后法式主动进入下一条动静的利用。 若Use返回值为false时,代表当前动静未被有效处置但仍会被办事器删除。然后法式主动进入下一条动静的利用。 若Use返回值为null时,代表当前动静会被办事重视新队列分配到其它可用的实例上再处置。然后法式主动进入下一条动静的利用。 若Use内部发作未被处置的异常,法式会停行。 (II)RabbitMQMessage对象定义如下: public class RabbitMQMessage { public string Message; public IDictionary<string, object> Header; public string Id; //此处系统主动生成的Id具有散布式独一Id的特征。 }NET为什么保举它做为RabbitMQ动静队列的首选开发东西  第4张

延时队列&死信队列

有些场景下,我们希望为利用的动静设定有效期。在有效期内,那些动静有效可用;但过时后,那些动静将变得无效不成用,同时,它们还将主动被丢弃进一个称之为“死信”的队列。

为了申明那些概念,我们仍是来举一个详细的例子。该例子的功用申明如下:

起首,在RabbitMQ办事器上定义一个名为"bbq"、且此中存放的动静会在60秒后过时失效的队列。然后,在RabbitMQ办事器上获取与"bbq"队列对应的【死信队列】。并持续从该【死信队列】中获打消息并把它们写入名为BB.txt的文件。最初,向RabbitMQ办事器上的"bbq"队列发送3个动静。

代码如下:

NET为什么保举它做为RabbitMQ动静队列的首选开发东西  第5张

using DeveloperSharp.RabbitMQ;//从NuGet引用DeveloperSharp.RabbitMQ包-------------------------- //定义bbq队列,此中存放的动静会在60秒后过时 var myQ = RabbitMQHelper.SetQueue("bbq", 60000); //获取与bbq队列对应的【死信队列】 var expQ = RabbitMQHelper.GetQueue("bbq"); //向BB.txt那个文本文件中持续写入【死信队列】中的动静 expQ.UseMessage(t => { System.IO.File.AppendAllText("D:/BB.txt", t.Message); return true; }); //向bbq队列发送3个动静 myQ.SendMessage("jinA"); myQ.SendMessage("jinB"); myQ.SendMessage("jinC"); /* //【附加题】:若去掉正文让此语句施行,【死信队列】中将不会获得动静(为啥?本身推理) RabbitMQHelper.UseMessage("bbq", t => { return true;//若此处返回false,【死信队列】将会获得动静 }); */NET为什么保举它做为RabbitMQ动静队列的首选开发东西  第6张

运行以上法式:

60秒之内,【BB.txt文件】中没有内容

60秒以后,【BB.txt文件】中显示出:jinAjinBjinC

通过以上例子,我们可简单预测一下,延时队列&死信队列常用在“限时消费”、“过时处置”等场景。生活中最常见示例如:订单请在10分钟内付出完毕、等等之类功用...