我有一个Jetty端点接收来自多个数据提供者的不同类型的推送消息 - 我们称之为 type1 , type2 。
我还提供了一组websocket-endpoints - 每种类型一个 - 客户端可以订阅不同消息类型的推送更新(/ ws_type1,/ ws_type2)。
数据提供者和客户端不一样。
根据传入消息的类型,我试图让camel路由仅将更新推送到订阅特定消息类型的客户端。
我的代码是这样的:
from("jetty:http://0.0.0.0:8888/incoming_1?matchOnUriPrefix=true")
.log("incoming_1")
.to("websocket://ws_type1?sendToAll=true");
from("jetty:http://0.0.0.0:8888/incoming_2?matchOnUriPrefix=true")
.log("incoming_2")
.to("websocket://ws_type2?sendToAll=true");
from("jetty:http://0.0.0.0:8080/incoming?matchOnUriPrefix=true")
.log("incoming")
.to("websocket://woot?sendToAll=true");
from("websocket://ws_type1")
.log("ws_type1")
.to("websocket://ws_type1")
;
from("websocket://ws_type2")
.log("ws_type2")
.to("websocket://ws_type2")
;
结果是 ALL 类型的 ALL 消息被发送到 ALL 连接的客户端 - 无论它们是否连接到 / ws_type1 或 / ws_type2 端点。
是否可以将更新过滤到不同的客户端集?即 type1 的消息被推送到连接到 / ws_type1 的客户端, type2 的消息被推送到连接到 / ws_type2的客户端
修改
使用上面的代码,我能够将websockets连接到ws-endpoints“ws_type1”,“ws_type2”和“woot”。但是 - 当我将数据发布到“/ incoming_1”jetty-endpoint时,所有三个websockets都会收到数据,但只会记录“incoming_1”。
我错过了什么吗?
编辑2: 我看了一下camel-websocket来源,看起来这是设计的。没有过滤消息内容发送到哪个websockets,并且内容直接写入套接字。这也意味着当服务器推送数据时,不会调用上面示例中的camel-routes“ws_type1”和“ws_type2”。
....
Collection<DefaultWebsocket> websockets = store.getAll();
Exception exception = null;
for (DefaultWebsocket websocket : websockets) {
try {
sendMessage(websocket, message);
...