/// <summary> /// 启动消息侦程序线程 /// </summary> private void Start(MessageListener listener) { ThreadPool.STPStartInfo stp = new ThreadPool.STPStartInfo(); stp.MaxStackSize = MaxThreads; stp.MaxWorkerThreads = MaxThreads; ThreadPool.SmartThreadPool smartThreadpool = new ThreadPool.SmartThreadPool(stp); while (true) { MQMessage message = null; if (messageQueue.QueueConfig.isTransactional) { MessageQueueTransaction tran = new MessageQueueTransaction(); message = new MQMessage(tran); message.Begin(); message.messageContent = messageQueue.Receive(tran).Body.ToString(); } else { message = new MQMessage(null); message.messageContent = messageQueue.Receive().Body.ToString(); } System.Threading.Interlocked.Increment(ref Counter); while (Counter >= MaxThreads) { System.Threading.Thread.Sleep(100); } smartThreadpool.QueueWorkItem(CallBack, message); } }
/// <summary> /// 消息侦听 /// </summary> /// <param name="message"></param> private static void consumer_Listener(MQMessage message) { try { message.Begin(); MQSendRequestModel obj = Newtonsoft.Json.JsonConvert.DeserializeObject<MQSendRequestModel>(message.messageContent); var plugin = PluginList.Find(p => p.Module == obj.MODULE); if (plugin != null) plugin.Process(EasyJson.Parse(obj.Arguments.ToString())); else Logger.MQLog.Error("命令类型[" + obj.MODULE + "]未被识别!"); // Logger.MQLog.Info("消息处理:" + message.messageContent); message.Commit(); } catch (Exception ex) { string logmsg = "消息[" + message.messageContent.ToString() + "]处理失败,准备回滚事务!原因:" + ex.Message; Logger.MQLog.Error(logmsg, ex); message.RollBack(); } }