嗨,我想基于 SOAP 会话在 apache camel 中执行粘性负载平衡,该会话嵌入在第一个响应的 ServiceGroupID 节点中。
我写了一个小路线如下:
from(uri)
.loadBalance().sticky(xpath(query).namespaces(env).namespaces(wsa).namespaces(ax))
.to(BE1,BE2);
其中 URI 是请求传递到的字符串,BE1 和 BE2 是两个后端服务器。
我的查询是
String query = "/soapenv:Envelope/soapenv:Header/wsa:ReplyTo/wsa:ReferenceParameters/axis2:ServiceGroupId/text()";
如果我没记错的话,这个查询将从我的 SOAP 标头中提取 servicegroupID。
但是当我尝试执行平衡时,由于某种原因,请求没有被传递到同一个后端服务器。
我的环境、 wsa 和 ax 是命名空间,它们是:
Namespaces env = new Namespaces("soapenv", "http://schemas.xmlsoap.org/soap/envelope/");
Namespaces wsa = new Namespaces("wsa", "http://www.w3.org/2005/08/addressing");
Namespaces ax = new Namespaces("axis2", "http://ws.apache.org/namespaces/axis2");
我在这里做错了吗?如果是这样呢?我将不胜感激任何帮助。