/// <summary> /// 发布消息线程方法 /// </summary> /// <param name="publishItem">数据消息</param> private void PublishThreadMethod(PublishItem publishItem) { if (this._subscibeItemList.Count == 0) { return; } Monitor.Enter(this._subscibeItemListMonitor); try { if (publishItem.Config != null && publishItem.Config.ParallelPublish) { //多线程并行发布消息 Parallel.ForEach(this._subscibeItemList, (tmpItem) => { tmpItem.Publish(publishItem.Message); }); } else { //单线程发布 foreach (var item in this._subscibeItemList) { item.Publish(publishItem.Message); } } } finally { Monitor.Exit(this._subscibeItemListMonitor); } }
/// <summary> /// 发布消息 /// </summary> /// <param name="message">消息</param> public void Publish(object message) { LMQConfig config = LMQConfigManager.GetLMQConfig(this.Topic); var publishItem = new PublishItem(config, message); if (config != null && config.SyncPublish) { this.PublishThreadMethod(publishItem); } else { if (this._asynPublishParaQueueThread == null) { string name = string.Format("本地消息队列主题{0}数据消息发布线程", this.Topic); this._asynPublishParaQueueThread = new AsynQueue <PublishItem>(this.PublishThreadMethod, name, true, true); } this._asynPublishParaQueueThread.Enqueue(publishItem); } }