Beispiel #1
0
        /// <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);
            }
        }
Beispiel #2
0
        /// <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);
            }
        }