Ejemplo n.º 1
0
        public ReceiveMessageBusiness()
        {
            if (ReceiveServiceSetting.IsOpenBatchReceiveHighMessage)
            {
                _highPool = new DataBufferPool(BatchHighPublisher, ReceiveServiceSetting.AutoFlushReceiveHighMessage, false);
            }
            if (ReceiveServiceSetting.IsOpenBatchReceiveMiddleMessage)
            {
                _middlePool = new DataBufferPool(BatchMiddlePublisher, ReceiveServiceSetting.AutoFlushReceiveMiddleMessage, false);
            }
            if (ReceiveServiceSetting.IsOpenBatchReceiveNormalMessage)
            {
                _normalPool = new DataBufferPool(BatchNormalPublisher, ReceiveServiceSetting.AutoFlushReceiveNormalMessage, false);
            }
            if (ReceiveServiceSetting.IsOpenBatchReceiveLowMessage)
            {
                _lowPool = new DataBufferPool(BatchLowPublisher, ReceiveServiceSetting.AutoFlushReceiveLowMessage, false);
            }
            Array enumArr = Enum.GetValues(typeof(MessagePriorityEnum));

            foreach (MessagePriorityEnum e in enumArr)
            {
                if (e != MessagePriorityEnum.None)
                {
                    RabbitMQBus bus = new RabbitMQBus();
                    m_rabbitBusDic.Add(e, bus);
                }
            }
        }
Ejemplo n.º 2
0
 private static void InitBus()
 {
     if (_bus == null)
     {
         _bus = new RabbitMQBus();
     }
 }
Ejemplo n.º 3
0
        public void Subscribe(RabbitMQBus rabbitMQ, MessagePriorityEnum priority, Action <NotifyMessage> handler)
        {
            try
            {
                string topic = priority.ToString().ToUpper();
                rabbitMQ.Bus.Subscribe(QueueDic[topic], (body, props, info) => Task.Factory.StartNew(() =>
                {
                    MetricsKeys.RabbitMQ_Subscribe.MeterMark("Success");
                    if (DataCache.Add(props.MessageId, 1, DateTime.Now.AddMinutes(10)))
                    {
                        try
                        {
                            if (props.Type == "M")
                            {
#if DEBUG
                                System.Diagnostics.Stopwatch watch = System.Diagnostics.Stopwatch.StartNew();
#endif
                                List <NotifyMessage> list = JsonConvert.DeserializeObject <List <NotifyMessage> >(Encoding.UTF8.GetString(body), serializerSettings);
                                for (int i = 0; i < list.Count; i++)
                                {
                                    handler(list[i]);
                                }
#if DEBUG
                                watch.Stop();
                                Process.Debug("订阅消息", "Consume", string.Format("数据模式:【{0}】,条数:【{1}】,耗时:【{2}】", props.Type, list.Count, watch.ElapsedMilliseconds), "");
#endif
                            }
                            else if (props.Type == "S")
                            {
                                handler(JsonConvert.DeserializeObject <NotifyMessage>(Encoding.UTF8.GetString(body), serializerSettings));
#if DEBUG
                                Process.Debug("订阅消息", "Consume", string.Format("数据模式:【{0}】,条数:【{1}】", props.Type, 1), "");
#endif
                            }
                        }
                        catch (Exception ex)
                        {
                            m_logger.Error("处理消息发生异常:" + ex.GetString());
                        }
                    }
                    else
                    {
                        RepeatMessageDic[props.MessageId] = RepeatMessageDic[props.MessageId] + 1;
                        ComsumeMessage(props.MessageId, RepeatMessageDic[props.MessageId]);
                    }
                }));
            }
            catch (Exception ex)
            {
                MetricsKeys.RabbitMQ_Subscribe.MeterMark("Error");
                m_logger.Error("订阅消息发生异常:" + ex.GetString());
                throw new RabbitMQException("订阅消息发生异常", ex);
            }
        }
Ejemplo n.º 4
0
        public void Parallel()
        {
            if (BuilderServiceSetting.SystemStatus != SystemStatusEnum.Initializing &&
                BuilderServiceSetting.SystemStatus != SystemStatusEnum.Stopping &&
                BuilderServiceSetting.SystemStatus != SystemStatusEnum.Stopped)
            {
                if (m_rabbitBusDic.Count == 0)
                {
                    BuilderServiceSetting.SystemStatus = SystemStatusEnum.Initializing;

                    List <BuilderServiceSetting.ParallelSubscribeSetting> list = BuilderServiceSetting.ParallelSubscribeSettingList;
                    Array enumArr = Enum.GetValues(typeof(MessagePriorityEnum));
                    if (list != null && list.Count > 0)
                    {
                        MessagePriorityEnum        priority;
                        List <MessagePriorityEnum> priorityList = new List <MessagePriorityEnum>();
                        foreach (BuilderServiceSetting.ParallelSubscribeSetting setting in list)
                        {
                            if (Enum.TryParse <MessagePriorityEnum>(setting.MessagePriority, out priority))
                            {
                                priorityList.Add(priority);
                            }
                        }
                        enumArr = priorityList.ToArray();
                    }
                    foreach (MessagePriorityEnum e in enumArr)
                    {
                        if (e != MessagePriorityEnum.None)
                        {
                            Process.Debug("并行生成消息", "Parallel", string.Format("消息优先级:【{0}】", e.ToString()), "");
                            RabbitMQBus bus = new RabbitMQBus();
                            m_rabbitBusDic.Add(e, bus);
                            Subscribe(bus, e);
                        }
                    }
                    BuilderServiceSetting.SystemStatus = SystemStatusEnum.Initialized;
                }
                BuilderServiceSetting.SystemStatus = SystemStatusEnum.Running;
            }
        }
Ejemplo n.º 5
0
 public void Publisher(RabbitMQBus rabbitMQ, MessagePriorityEnum priority, List <NotifyMessage> messageList)
 {
     try
     {
         string            topic = priority.ToString().ToUpper();
         var               body  = Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(messageList, serializerSettings));
         MessageProperties prop  = new MessageProperties()
         {
             AppId     = ConfigurationAppSetting.AppId,
             Priority  = (byte)priority,
             MessageId = messageList[0].MessageId,
             Type      = "M"
         };
         rabbitMQ.Bus.OpenPublishChannel().Publish(ExchangeDic[topic], "", prop, body);
         MetricsKeys.RabbitMQ_Publish.MeterMark("Success");
     }
     catch (Exception ex)
     {
         MetricsKeys.RabbitMQ_Publish.MeterMark("Error");
         m_logger.Error("推送消息发生异常:" + ex.GetString());
         throw new RabbitMQException("推送消息发生异常", ex);
     }
 }
Ejemplo n.º 6
0
        private static void InitQuene(RabbitMQBus rabbitMQ)
        {
            Array     enumArr        = Enum.GetValues(typeof(MessagePriorityEnum));
            string    queueFormat    = "JinRi.Notify.Business.Queue.{0}";
            string    exchangeFormat = "JinRi.Notify.Business.Exchange.{0}";
            IQueue    queue          = null;
            IExchange exchange       = null;
            IBinding  binding        = null;

            foreach (MessagePriorityEnum e in enumArr)
            {
                if (e != MessagePriorityEnum.None)
                {
                    string s = e.ToString().ToUpper();

                    //queue = rabbitMQ.Bus.QueueDeclare(string.Format(queueFormat, s), false, true, false, false, null, null, null, null, null, null, null);
                    //exchange = rabbitMQ.Bus.ExchangeDeclare(string.Format(exchangeFormat, s), ExchangeType.Topic);
                    //binding = rabbitMQ.Bus.Bind(exchange, queue, "");
                    QueueDic.Add(s, queue);
                    ExchangeDic.Add(s, exchange);
                    BindingDic.Add(s, binding);
                }
            }
        }
Ejemplo n.º 7
0
 private void Subscribe(RabbitMQBus bus, MessagePriorityEnum priority)
 {
     Process.Debug("并行生成消息", "Subscribe", string.Format("开始订阅,消息优先级:【{0}】", priority.ToString()), "");
     RabbitMQBusiness.Instance.Subscribe(bus, priority, m_buildBus.Build);
 }