如何在 Vertx 中访问 Session Object Inside 事件总线?
How to access the Session Object Inside event bus in Vertx?
我的请求处理程序
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()
简短的回答,你不能。路由上下文会话与事件总线无关。事件总线可以在没有 HTTP 服务器的情况下部署,而路由上下文是一个非常特定于 Web 的东西。
如果你需要在你的事件总线上有状态那么我会说你需要在你的消息头中传递会话 ID,并且只有当会话是集群时你才可以从集群存储中检索它按编号。这样做你也可能会引入不一致,所以我建议不要这样做。
或者将所有需要的会话数据放入消息负载中。
我的请求处理程序
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()
简短的回答,你不能。路由上下文会话与事件总线无关。事件总线可以在没有 HTTP 服务器的情况下部署,而路由上下文是一个非常特定于 Web 的东西。
如果你需要在你的事件总线上有状态那么我会说你需要在你的消息头中传递会话 ID,并且只有当会话是集群时你才可以从集群存储中检索它按编号。这样做你也可能会引入不一致,所以我建议不要这样做。
或者将所有需要的会话数据放入消息负载中。