在服务器cxf之间传输请求

时间:2015-11-03 10:09:33

标签: java cxf

我发现有关CXF的难题。 我的问题描述如下:

我有两台服务器A和B实现相同的服务。

客户端同时向服务器A发送请求(例如:100个线程的100个请求)。当客户端从服务器A接收到60个响应时,服务器A被挂起。因此,A中客户端的40个请求的其余部分将被转移到服务器B.服务器B将响应客户端。

我可以编写一个Java类来捕获A中客户端的40个其余请求并将它们推送到B中以响应客户端吗?你能给我一个实现这个Java类的建议吗?

客户端和服务器是根据http://cxf.apache.org/docs/a-simple-jax-ws-service.html

中的示例实现的

致以最诚挚的问候,

THO

2 个答案:

答案 0 :(得分:0)

通常,我没有看到将活动请求从一个服务器移动到另一个服务器的实现。我看到的典型解决方案是:

  1. 拥有某种负载均衡器。
  2. 拥有某种会话管理解决方案(例如Spring Session)。由于它在HttpSession上运行,因此它独立于CXF。 (相信我,至少你的安全计划,你将拥有州。)
  3. 如果要取出服务器A,请阻止从负载均衡器向服务器A分配新请求。
  4. 当当前请求消失时,您可以关闭A并随意执行任何操作。
  5. 优点:

    • 请求排放比会话排放快得多
    • 会话管理解决方案意味着无用户停机时间发布
    • 会话管理解决方案还意味着您不需要粘性会话

    缺点:

    • 您的会话使用必须向后兼容(至少对于发布而言)
    • 如果会话使用量很大,则会产生效率成本。
    • 您需要确保没有长时间运行的请求

答案 1 :(得分:0)

您正在寻找错误的解决方案,WebServices通常是同步操作。同步我的意思是说,webservice客户端发送请求并等待服务器响应,如果服务器没有响应设置超时(在webservice客户端你可以设置连接超时),请求终止连接超时错误或任何其他异常,其客户端决定是否重新发送错误或将错误传播到上游系统。在您的情况下,您可以重新发送剩余的请求并使用负载均衡器,以便将请求路由到其他服务器。

另一种解决方案是将JMS与客户端确认一起使用,这样只有在成功处理请求的情况下才会删除请求。如果有任何错误,您不会删除请求。在这种情况下,假设您暂停服务器,因为处理不成功,消息符合其他服务器JMS侦听器处理请求的条件。

注意:如果您已经开发了Web服务,则CXF提供JMS传输