
RabbitMQ 消息生产者操作类
发布日期:2021-05-14 17:45:23
浏览次数:18
分类:精选文章
本文共 2831 字,大约阅读时间需要 9 分钟。
public class RabbitMQHelper{ private static IConnection rabbitMqConnection = null; private static RabbitMQHelper _Instance = null; private static readonly object objLock = new object(); private RabbitMQHelper(string hostName, int port, string virtualHost, string userName, string pwd) { ConnectionFactory rabbitMqFactory = new ConnectionFactory() { HostName = hostName, Port = port, VirtualHost = virtualHost, UserName = userName, Password = pwd, Protocol = Protocols.DefaultProtocol, AutomaticRecoveryEnabled = true }; rabbitMqConnection = rabbitMqFactory.CreateConnection(); } ~RabbitMQHelper() { if (rabbitMqConnection != null) { rabbitMqConnection.Close(); } } public static RabbitMQHelper Instance(string hostName, int port, string virtualHost, string userName, string pwd) { if (_Instance == null) { lock (objLock) { if (_Instance == null) { _Instance = new RabbitMQHelper(hostName, port, virtualHost, userName, pwd); } } } return _Instance; } public IConnection Connection() { return rabbitMqConnection; } public void MessageProducer(string exchangeName, string routingKey, string queueName, ListlistMessage, string type = "direct") { if (listMessage != null && listMessage.Count > 0) { using (IModel channel = rabbitMqConnection.CreateModel()) { Dictionary args = new Dictionary (); args.Add("x-dead-letter-exchange", "exchange.dlx"); args.Add("x-dead-letter-routing-key", "rk.sp.mipo"); channel.QueueDeclare(queueName, true, false, false, args); channel.ExchangeDeclare(exchangeName, type, durable: true, autoDelete: false, arguments: null); channel.QueueDeclare(queueName, durable: true, autoDelete: false, exclusive: false, arguments: args); channel.QueueBind(queueName, exchangeName, routingKey); var props = channel.CreateBasicProperties(); props.Persistent = true; props.DeliveryMode = 2; channel.ConfirmSelect(); foreach (var msg in listMessage) { channel.BasicPublish(exchangeName, routingKey, basicProperties: props, body: Encoding.UTF8.GetBytes(msg)); } channel.WaitForConfirmsOrDie(); } } }}
以上代码实现了对RabbitMQ的高效管理,支持单例模式和消息批量发布功能。代码中使用了死 letter exchange来处理不可恢复的消息,同时支持消息的持久化和确认机制。
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年04月07日 09时43分01秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
C字符串高级
2019-03-11
2010-03-25 函数题
2019-03-11
C语言_动态内存分配练习
2019-03-11
Linux学习_系统进程概念
2019-03-11
七层网络模型(待添加)
2019-03-11
考研复试——KY276 Problem C
2019-03-11
老鸟带你画tiled lines
2019-03-11
MybatisPlus自定义Sql实现多表查询
2019-03-12
Java位运算,负数的二进制表示形式,int类型最大值为什么是2的31次方-1
2019-03-12
PyQt5快速上手基础篇10-QSettings用法
2019-03-12
JQuery--手风琴,留言板
2019-03-12
MFC 自定义消息发送字符串
2019-03-12
goahead 下goaction测试与搭建
2019-03-12
Adding Powers
2019-03-12
ideal 下创建springboot项目
2019-03-12
Linux操作系统的安装与使用
2019-03-12
ajax请求出现/[object%20Object]错误的解决办法
2019-03-12
流体运动估计光流算法研究
2019-03-12
如何转载博客
2019-03-12
C++ 继承 详解
2019-03-12