三个方法的详细功能说明(辅助参考):
(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的特性 。 }延时队列&死信队列
有些场景下,我们希望为使用的消息设定有效期 。在有效期内,这些消息有效可用;但过期后,这些消息将变得无效不可用,同时,它们还将自动进入一个称之为“死信”的队列 。
为了说明这些概念,我们还是来举一个具体的例子 。该例子的功能说明如下:
- 首先,在RabbitMQ服务器上定义一个名为"bbq"的队列 。且设定此队列中存放的所有消息会在60秒后过期失效 。
- 然后,在RabbitMQ服务器上定义一个与"bbq"队列对应的死信队列 。并连续从该死信队列中获取消息并把它们写入名为BB.txt的文件 。
- 最后,向RabbitMQ服务器上的"bbq"队列发送3个消息 。
using 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,死信队列将会获得消息 }); */
经验总结扩展阅读
- 乔迁新居穿过的衣服可以搬进去吗 乔迁新居穿过的衣服怎么处理
- 房间白色蛆虫怎么处理
- 床上棉虫怎么处理
- 《基于Apache Flink的流处理》读书笔记
- 花生生虫子处理小诀窍
- 苹果A15处理器参数_苹果A15处理器表现
- 结婚压箱底钱怎么处理
- 案板上有特别小的虫子怎么处理
- Java Style的C++容器流式处理类
- 眼镜生锈变绿怎么处理