/// <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); }
/// <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); }