RabbitMQ 消费者操作类

    /// <summary>
    /// 
    /// </summary>
    public class RabbitMqWorker
    {
        //
        readonly string rabbitMQ_HostConfig = System.Configuration.ConfigurationManager.AppSettings["RabbitMQ_Host22"];
        //
        BackgroundWorker bg = new BackgroundWorker();
        //
        IConnection rabbitMqConnection = null;

        /// <summary>
        /// 
        /// </summary>
        public RabbitMqWorker()
        {
            string[] arrRabbitConfig = rabbitMQ_HostConfig.Split(',');
            rabbitMqConnection = RabbitMQHelper.Instance(arrRabbitConfig[0], int.Parse(arrRabbitConfig[1]), arrRabbitConfig[2], arrRabbitConfig[3], arrRabbitConfig[4]).Connection();
        }

        /// <summary>
        /// 
        /// </summary>
        public void Start()
        {
            Program.loggor.Info("Start RabbitMqWorker");
            bg.DoWork += new DoWorkEventHandler(bg_DoWork);
            bg.WorkerSupportsCancellation = true;
            bg.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bg_RunWorkerCompleted);
            bg.RunWorkerAsync();
        }

        /// <summary>
        /// 
        /// </summary>
        public void Stop()
        {
            if (rabbitMqConnection != null)
            {
                rabbitMqConnection.Close();
            }
            if (bg != null && bg.IsBusy)
            {
                bg.CancelAsync();
            }
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void bg_DoWork(object sender, DoWorkEventArgs e)
        {

            try
            {
                System.Threading.Thread.Sleep(1000);

                System.Threading.Tasks.Parallel.Invoke(
                    () => { MessageConsumer("queue.sp.mipo.message"); },
                    () => { MessageConsumer("queue.sp.mipo.message"); },
                    () => { MessageConsumer("queue.sp.mipo.message"); },
                    () => { MessageConsumer("queue.sp.mipo.message"); },
                    () => { MessageConsumer("queue.sp.mipo.message"); });


                /* 
                               System.Threading.Tasks.Parallel.Invoke(
                                   () => { MessageConsumer("queue.sp.mipo.message"); }); 
               */
            }
            catch (Exception ex)
            {
                EMailHelper.ToMail(ex);

                Program.loggor.Error("RabbitMqWorker", ex);
            }
        }

        /// <summary>
        /// 消息消费者
        /// </summary>
        /// <param name="queueName"></param>
        void MessageConsumer(string queueName)
        {
            //1.声明信道
            using (IModel channel = rabbitMqConnection.CreateModel())
            {
                //2.声明队列
                Dictionary<string, object> args = new Dictionary<string, object>();
                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);
                //3.绑定队列交换机, 指定路由Key值
                //channel.QueueBind(queueName,);
                //3.1同一时刻服务器只发一条消息给消费者, 公平分发
                channel.BasicQos(0, 1, false);
                //4.定义消费者
                var consumer = new QueueingBasicConsumer(channel);
                //5.监听队列,手动返回完成状态
                channel.BasicConsume(queueName, false, consumer);
                //6.循环取消息
                while (true)
                {
                    var ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
                    var body = ea.Body;
                    var message = Encoding.UTF8.GetString(body);
                    //
                    System.Threading.Thread.Sleep(10);

                    //I.Todo...消费消息进行逻辑处理
                    if (RabbitConsumeBll.Instance().Bus(message))
                    {
                        //6.1成功后反馈确认状态
                        channel.BasicAck(ea.DeliveryTag, false);
                    }
                    else
                    {
                        //6.2失败后反馈拒绝状态
                        channel.BasicReject(ea.DeliveryTag, false);
                    }
                }
            }

        }

        /// <summary>
        /// 后台线程执行完成
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void bg_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            if (e.Error != null)
            {
                Program.loggor.Error("RabbitMqWorker", e.Error);
            }
        }

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值