使用Apache Camel和多个websocket端点

时间:2016-08-05 08:51:27

标签: java websocket apache-camel

我有一个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);
    ...

Full source

0 个答案:

没有答案