我有一个服务从多个客户端获取请求,并在某些处理向客户端发送响应之后。我使用ThreadPoolExecutor(threadExecuterClient)来处理客户端请求,并将它们放在BlockingQueue(requestQueue)中。许多客户端可以发送并发请求。我有另一个ThreadPoolExecutor(threadExecuterServer)处理requestQueue中的请求。这个处理过程基本上是把这个请求发送到服务器并得到响应。处理完成后,我需要将该响应发送给发出请求的客户端。我很难跟踪哪个客户提出了哪个请求。我基本上需要找到一种方法将客户端请求映射到处理结果。该服务将像一个网关。Java对许多线程的许多线程关系
任何想法来处理这个问题表示赞赏。
谢谢
您可以在每个请求中附加客户端ID,并且该请求会像threadExecuterServer一样接收。在执行请求时,请求可以被分割以获取客户端做出的实际请求..并且在处理请求之后将客户端ID重新附加到响应代码中。IMO – 2013-03-05 17:40:43
抱歉,您正在寻找一种跟踪工作的方式?一个简单的记录器说明每个执行的处理(请求接受,通过网关处理,响应发送)的请求ID是不够的? – devlearn 2013-03-05 17:42:23
@VishalK我的第一个直觉就像你的直觉。但是,仅通过附加ID来处理请求就太复杂了。服务器线程始终处于活动状态,并且它们可以发送请求,因为队列中有更多的请求,而无需等待先前请求的响应。对于客户端线程,每个连接创建一个线程,客户端可以使用相同的连接发送多个请求,直到客户端关闭连接。对于最后一部分,我不确定一个连接是否适合多个请求。我可以为每个请求使用一个唯一的连接。 – celik 2013-03-05 18:31:31