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); } } }
private static void InitBus() { if (_bus == null) { _bus = new RabbitMQBus(); } }
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); } }
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; } }
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); } }
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); } } }
private void Subscribe(RabbitMQBus bus, MessagePriorityEnum priority) { Process.Debug("并行生成消息", "Subscribe", string.Format("开始订阅,消息优先级:【{0}】", priority.ToString()), ""); RabbitMQBusiness.Instance.Subscribe(bus, priority, m_buildBus.Build); }