关于RabbmitMq使用

1、关于引用

针对RabbitMQ.Client  6.8.1

2、基类

public class RabbitMqHelper
    {
        public static string HostName = "127.0.0.1";//服务端IP地址
        public static int PortNum = 5672;//服务端监听的端口号
        public static string UserName = "guest";
        public static string Password = "guest";
        public static string VirtualHost = "saas";
        /// <summary>
        /// 创建连接
        /// </summary>
        /// <returns></returns>
        public IConnection GetConnection()
        {
            try
            {
                var factory = new ConnectionFactory()
                {
                    HostName = HostName,
                    Port = PortNum,
                    UserName = UserName,
                    Password = Password,
                    VirtualHost = VirtualHost
                };
                var conn = factory.CreateConnection();
                return conn;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }

2、发布信息

public class RabbmitMqSendHelper : RabbitMqHelper
    {
        /// <summary>
        /// 发送消息
        /// </summary>
        /// <param name="msg"></param>
        /// <returns></returns>
        public bool SendMsg(Hashtable hashtable)
        {
            try
            {
                using (var conn = GetConnection())
                {
                    using (var channel = conn.CreateModel())
                    {
                        //声明交换机
                        string exchangeName = hashtable["topic"].ToString();
                        channel.ExchangeDeclare(exchangeName, ExchangeType.Direct, true, false, null);
                        //声明队列
                        string queueName = hashtable["routingKey"].ToString();
                        channel.QueueDeclare(queue: queueName,
                                     durable: true,
                                     exclusive: false,
                                     autoDelete: false,
                                     arguments: null);
                        //队列绑定交换机
                        channel.QueueBind(queueName, exchangeName, routingKey: queueName);
                        string msg = JsonHelper.SerializeObject(hashtable);
                        //发送数据
                        var body = Encoding.UTF8.GetBytes(msg);
                        channel.BasicPublish(exchange: exchangeName,
                                             routingKey: queueName,
                                             basicProperties: null,
                                             body: body);
                    };
                };
                return true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }

3、信息订阅

/// <summary>
    /// 扇形交换机接收消息
    /// </summary>
    public class RabbitMqFanoutReceiveHelper : RabbitMqHelper
    {
        public RabbitMqReceiveEventHandler OnReceiveEvent;

        private IConnection conn;

        private IModel channel;

        private EventingBasicConsumer consumer;

        public bool StartReceiveMsg(string exchange,string queueName)
        {
            try
            {
                using (var conn = GetConnection())
                {
                    using (var channel = conn.CreateModel())
                    {
                channel.ExchangeDeclare(exchange: exchange, type: ExchangeType.Fanout,durable:true);
                //此处随机取出交换机下的队列
                //var queueName = channel.QueueDeclare().QueueName;
                channel.QueueBind(queue: queueName, exchange: exchange, routingKey: "");
                consumer = new EventingBasicConsumer(channel);
                consumer.Received += (model, ea) =>
                {
                    var body = ea.Body.ToArray();
                    var message = Encoding.UTF8.GetString(body);
                    //Console.WriteLine(" [x] Received {0}", message);
                    if (OnReceiveEvent != null)
                    {
                        OnReceiveEvent(queueName+"::"+message);
                    }
                };
                channel.BasicConsume(queue: queueName,
                                        autoAck: true,
                                        consumer: consumer);

};
                };
                return true;
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }

4、主程序初始化

private RabbmitMqSendHelper helper = null;

/// <summary>
        /// 初始化MQ
        /// </summary>
        private void InitMQ()
        {
            if (string.IsNullOrEmpty(DAL.LoginSession.RabbitMQConfig.MqIP))
            {
                MQIP = "请配置MQ";
                return;
            }
            ClassLib.RabbitMqHelper.HostName = DAL.LoginSession.RabbitMQConfig.MqIP;
            if (string.IsNullOrEmpty(DAL.LoginSession.RabbitMQConfig.MqPort))
            {
                MQIP = "请配置MQ";
                return;
            }
            ClassLib.RabbitMqHelper.PortNum = Convert.ToInt32(DAL.LoginSession.RabbitMQConfig.MqPort);
            if (string.IsNullOrEmpty(DAL.LoginSession.RabbitMQConfig.MqUser))
            {
                MQIP = "请配置MQ";
                return;
            }
            ClassLib.RabbitMqHelper.UserName = DAL.LoginSession.RabbitMQConfig.MqUser;
            if (string.IsNullOrEmpty(DAL.LoginSession.RabbitMQConfig.MqPassWord))
            {
                MQIP = "请配置MQ";
                return;
            }
            ClassLib.RabbitMqHelper.Password = DAL.LoginSession.RabbitMQConfig.MqPassWord;
            if (string.IsNullOrEmpty(DAL.LoginSession.RabbitMQConfig.MqVirtualHost))
            {
                MQIP = "请配置MQ";
                return;
            }
            ClassLib.RabbitMqHelper.VirtualHost = DAL.LoginSession.RabbitMQConfig.MqVirtualHost;
            MQIP = DAL.LoginSession.RabbitMQConfig.MqIP;
            helper = new ClassLib.RabbmitMqSendHelper();
        }

5、发送数据

if (helper != null)
                                            {
                                                var dInfo = shopTagPrintInfoModels?.Where(o => o.num == dcode).FirstOrDefault();
                                                Hashtable parm = new Hashtable();
                                                parm.Add("tenantId", DAL.LoginSession.UserData.tenant_id);
                                                parm.Add("epc", tag);
                                                parm.Add("collectionDeviceNum", dcode);
                                                parm.Add("collectionDeviceIp", tagInfo.IP);
                                                parm.Add("collectionDeviceMac", dInfo?.mac);
                                                parm.Add("place", dInfo?.place);
                                                parm.Add("collectionTime", CoventTime(time));
                                                parm.Add("reportingTime", DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
                                                Hashtable hashtable = new Hashtable();
                                                hashtable.Add("routingKey", "archive.queue.commonEvent");
                                                hashtable.Add("topic", "archive.directExchange");
                                                hashtable.Add("payload", parm);
                                                helper.SendMsg(hashtable);
                                            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值