Пример #1
0
        /// <summary>
        /// 启动服务,开始接收消息
        /// </summary>
        /// <param name="Consumer">线程数</param>
        /// <returns></returns>
        public bool StartService(int Consumer)
        {
            if (IsRunning)
            {
                return(false);
            }

            Logger.Debug($"{this.ServiceName} 启用线程数量:{Consumer}");
            //向路由注册服务
            var initial_res = _InitializeService();

            if (initial_res?.Success == true)
            {
                Logger.Info($"{this.ServiceName} 服务模块注册成功");
                for (int i = 0; i < Consumer; i++)
                {
                    NetMQ.Sockets.ResponseSocket response = new NetMQ.Sockets.ResponseSocket();
                    response.Connect($"{ServerAddress.IP}:{initial_res.Port}");
                    response.ReceiveReady += Response_ReceiveReady;

                    /* 修正客户端无法异步请求的问题
                     * 每一个REP必须使用独立的一条线程
                     * 当REP收到请求之后,只有回复以后才能接受下一个请求
                     * 如果所有Consumer(REP)都正在工作,则其他请求就会挂起
                     * 所以最大同时请求数量受Consumer的影响
                     */
                    var poller = new NetMQPoller()
                    {
                        response, new NetMQTimer(Timeout)
                    };
                    poller.RunAsync();
                    _pollerList.Add(poller);
                    _sockList.Add(response);
                    IsRunning = true;
                }
            }
            else
            {
                Logger.Error($"{this.ServiceName} 路由注册服务失败!");
            }
            return(IsRunning);
        }
Пример #2
0
        /// <summary>
        /// 启动服务,开始接收消息
        /// </summary>
        /// <param name="Consumer">消费者数量</param>
        /// <returns></returns>
        public bool StartService(int Consumer)
        {
            if (IsRunning)
            {
                return(false);
            }

            var initial_res = Initialize();

            if (initial_res?.Success == true)
            {
                for (int i = 0; i < Consumer; i++)
                {
                    NetMQ.Sockets.ResponseSocket response = new NetMQ.Sockets.ResponseSocket();
                    response.Connect($"{ServerAddress.IP}:{initial_res.Port}");
                    response.ReceiveReady += Response_ReceiveReady;

                    /* 修正客户端无法异步请求的问题
                     * 每一个REP必须使用独立的一条线程
                     * 当REP收到请求之后,只有回复以后才能接受下一个请求
                     * 如果所有Consumer(REP)都正在工作,则其他请求就会挂起
                     * 所以最大同时请求数量受Consumer的影响
                     */
                    var poller = new NetMQPoller()
                    {
                        response, new NetMQTimer(Timeout)
                    };
                    poller.RunAsync();
                    _pollerList.Add(poller);
                    _sockList.Add(response);
                    IsRunning = true;
                }
            }

            return(IsRunning);
        }