RabbitMQ帮助类

rabbitmq,帮助 · 浏览次数 : 107

小编点评

**RabbitMQHelper** * 提供获取 RabbitMQ 连接的静态方法 `GetConnection()`。 * 在创建模型 `MqModel` 时,根据 `type`、`content` 两个属性设置消息类型和消息实体。 **MqModel** * 定义消息类型:1、2、3、4、5、6。 * 定义消息实体类型。 **PublishMsg** * 根据 `type`、`routingKey` 和 `et` 参数,实例化 `MqModel` 并将其转换为二进制数据。 * 使用 `BasicPublish()` 方法将消息发送到 RabbitMQ 中。 **总结** `RabbitMQHelper` 用于获取和创建 RabbitMQ 连接,以及根据 `type`、`routingKey` 和 `et` 参数发布消息。 `MqModel` 定义了消息类型和实体,`PublishMsg` 方法根据这些信息实例化 `MqModel` 并将其编码为二进制数据发送。

正文

一、RabbitMQHelper

  /// <summary>
    /// RabbitMQHelper 的摘要说明
    /// </summary>
    public class RabbitMQHelper
    {
        //主机
        private readonly static string host =  ConfigurationManager.AppSettings["MqHost"].ToString().Trim();
        //端口
        private readonly static string port = ConfigurationManager.AppSettings["MqPort"].ToString().Trim();
        //用户
        private readonly static string userName = ConfigurationManager.AppSettings["MqUser"].ToString().Trim();
        //密码
        private readonly static string passWord = ConfigurationManager.AppSettings["MqPwd"].ToString().Trim();
        //交换机
        private readonly static string exchangeName = ConfigurationManager.AppSettings["MqExchange"].ToString().Trim();
        //队列
        //private readonly static string queueName = ConfigurationManager.AppSettings["MqQueue"].ToString().Trim();

        //队列
        private readonly static string queueName1 = "Can_Gather";
        private readonly static string queueName2 = "Can_Tire";
        private readonly static string queueName3 = "Can_Fault";
        private readonly static string queueName4 = "Can_Alarm";
        private readonly static string queueName5 = "Can_Behavior";
        private readonly static string queueName6 = "Can_Violate";

        /// <summary>
        /// 获取RabbitMQ连接
        /// </summary>
        /// <returns></returns>
        public static IConnection GetConnection()
        {
            //实例化链接工厂
            var factory = new ConnectionFactory
            {
                HostName = host, //ip
                Port = 5672, // 端口
                UserName = userName, // 账户
                Password = passWord, // 密码
                VirtualHost = "/" ,  // 虚拟主机
                AutomaticRecoveryEnabled = true,//断开默认重连
                TopologyRecoveryEnabled = true
            };

            return factory.CreateConnection();
        }


        /// <summary>
        /// 建立链接
        /// </summary>
        /// <returns></returns>
        public static IModel CreateConnection()
        {
            var connection = RabbitMQHelper.GetConnection();
            var channel = connection.CreateModel();

            // 声明Direct交换机
            channel.ExchangeDeclare(exchangeName, "direct");

            // 声明创建队列
            channel.QueueDeclare(queueName1, false, false, false, null);
            channel.QueueDeclare(queueName2, false, false, false, null);
            channel.QueueDeclare(queueName3, false, false, false, null);
            channel.QueueDeclare(queueName4, false, false, false, null);
            channel.QueueDeclare(queueName5, false, false, false, null);
            channel.QueueDeclare(queueName6, false, false, false, null);

            // 绑定到交互机 指定routingKey
            channel.QueueBind(queue: queueName1, exchange: exchangeName, routingKey: "gather");//完成
            channel.QueueBind(queue: queueName2, exchange: exchangeName, routingKey: "tire");
            channel.QueueBind(queue: queueName3, exchange: exchangeName, routingKey: "fault");//完成
            channel.QueueBind(queue: queueName4, exchange: exchangeName, routingKey: "alarm");//完成
            channel.QueueBind(queue: queueName5, exchange: exchangeName, routingKey: "behavior");//完成
            channel.QueueBind(queue: queueName6, exchange: exchangeName, routingKey: "violate");
            return channel;
        }

    }

二、MqModel

 /// <summary>
    /// MqModel 的摘要说明
    /// </summary>
    public class MqModel
    {
        /// <summary>
        /// 消息类型,1:gather,2:behavior,3:alarm,4:fault,5:tire, 6:violate
        /// </summary>
        public int type { get; set; }

        /// <summary>
        /// 消息实体
        /// </summary>
        public object content { get; set; }
    }

三、PublishMsg

  /// <summary>
        /// 根据routingKey发布消息
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="type"></param>
        /// <param name="routingKey"></param>
        /// <param name="et"></param>
        private void PublishMsg<T>(int type,string routingKey, T et)
        {
            #region 发布MQ消息
            //按照消费端格式定义
            MqModel publishModel = new MqModel()
            {
                type = 1,
                content = et
            };
            //转换
            string jsonStr = JsonConvert.SerializeObject(publishModel);
            var body = Encoding.UTF8.GetBytes(jsonStr);//消息以二进制形式传输
            channel.BasicPublish(exchange: exchangeName, routingKey: routingKey, null, body);
            #endregion
        }

与RabbitMQ帮助类相似的内容:

RabbitMQ帮助类

一、RabbitMQHelper /// /// RabbitMQHelper 的摘要说明 /// public class RabbitMQHelper { //主机 private readonly static string host = Config

说说RabbitMQ延迟队列实现原理?

使用 RabbitMQ 和 RocketMQ 的人是幸运的,因为这两个 MQ 自身提供了延迟队列的实现,不像用 Kafka 的同学那么苦逼,还要自己实现延迟队列。当然,这都是题外话,今天咱们重点来聊聊 RabbitMQ 延迟队列的实现原理,以及 RabbitMQ 实现延迟队列的优缺点有哪些? 很多人

在C#中使用RabbitMQ做个简单的发送邮件小项目

在C#中使用RabbitMQ做个简单的发送邮件小项目 前言 好久没有做项目了,这次做一个发送邮件的小项目。发邮件是一个比较耗时的操作,之前在我的个人博客里面回复评论和友链申请是会通过发送邮件来通知对方的,不过当时只是简单的进行了异步操作。 那么这次来使用RabbitMQ去统一发送邮件,我的想法是通过

5分钟带你了解RabbitMQ的(普通/镜像)集群

通过本文我们深入了解了RabbitMQ的集群模式及其优缺点。无论是普通集群还是镜像集群,都有其适用的场景和局限性。普通集群利用Erlang语言的集群能力,但消息可靠性和高可用性方面存在一定挑战;而镜像集群通过主动消息同步提高了消息的可靠性和高可用性,但可能会占用大量网络带宽。因此,在选择集群方案时,...

RabbitMQ 进阶使用之延迟队列 → 订单在30分钟之内未支付则自动取消

开心一刻 晚上,媳妇和儿子躺在沙发上 儿子疑惑的问道:妈妈,你为什么不去上班 媳妇:妈妈的人生目标是前20年靠父母养,后40年靠你爸爸养,再往后20年就靠你和妹妹养 儿子:我可养不起 媳妇:为什么 儿子:因为,呃...,我和你的想法一样 讲在前面 如果你们对 RabbitMQ 感到陌生,那可以停止往

RabbitMQ+redis+Redisson分布式锁+seata实现订单服务

引言 订单服务涉及许多方面,分布式事务,分布式锁,例如订单超时未支付要取消订单,订单如何防止重复提交,如何防止超卖、这里都会使用到。 开启分布式事务可以保证跨多个服务的数据操作的一致性和完整性, 使用分布式锁可以确保在同一时间只有一个操作能够成功执行,避免并发引起的问题。 订单流程(只展示重要的内容

RabbitMQ 3.7.9版本中,Create Channel超时的常见原因及排查方法

在RabbitMQ 3.7.9版本中,Create Channel超时的常见原因及排查方法如下: 常见原因 网络问题: 网络延迟或不稳定可能导致通信超时。 网络分区(network partition)可能导致部分节点无法访问。 资源限制: RabbitMQ服务器上的文件描述符或句柄数量限制。 服务

[转帖]RabbitMQ服务优化,修改最大连接数

https://www.cnblogs.com/hoyeong/p/16242202.html RabbitMQ的优化RabbitMQ的连接数是压垮消息队列的一个重要的指标。所以在平时使用OpenStack平台的过程中,如果大量的用户同时创建虚拟机,会导致云平台创建报错,其实就是消息队列服务的崩溃。

[转帖]RabbitMQ性能优化

https://www.cnblogs.com/zhengchunyuan/p/9253728.html 修改rabbitmq.config文件 rabbitmq.config文件时rabbitmq的配置文件,他遵守Erlang配置文件定义。 rabbitmq.config文件位置: Unix $R

[转帖]RabbitMQ的Vhost,Exchange,Queue原理分析

RabbitMQ的Vhost,Exchange,Queue原理分析https://www.cnblogs.com/zhengchunyuan/p/9253725.html Vhost分析 RabbitMQ的Vhost主要是用来划分不同业务模块。不同业务模块之间没有信息交互。 Vhost之间相互完全隔