如何访问Vertx中的Session Object Inside事件总线?

时间:2016-05-26 01:24:10

标签: vert.x

我的请求处理程序

 router.route("/clientController/*").handler(sockJSHandler);

我的活动巴士是

eb.consumer("chat.to.server",message->{
        System.out.println("Getting Request in Client Controller Event Bus");
        JsonObject data = (JsonObject) message.body();
        String classifier = data.getString("classifier");

        if(classifier.equals("loginUri")) {
            System.out.println("Request for Login URI");
            vertx.executeBlocking(future -> {
                future.complete(OAuth.getOAuthParam());
            }, res -> {
                eb.publish("chat.to.client", res.result());
            });

        }

是否可以访问事件总线内的会话对象,因为我们执行正常的路由处理程序,如routingContext.getSession()

1 个答案:

答案 0 :(得分:1)

简短的回答,你不能。路由上下文会话与eventbus无关。可以在没有HTTP服务器的情况下部署eventbus,而路由上下文是特定于Web的事物。

如果您需要在事件总线上拥有状态,那么我会说您需要在消息头中传递会话ID,并且只有在会话是群集的时候,您才可以通过id从群集存储中检索它。通过这样做,您可能也会引入不一致性,所以我建议不要这样做。

备选方案只需将所有必需的会话数据放入消息有效负载中。