从活动总线获取用户

时间:2015-10-05 11:46:15

标签: vert.x vertx3

我正在查看文档,但我找不到任何信息。 我有一个HTTP请求,我可以轻松地从上下文中获取用户。

    router.get("/politrons/users").handler(routingContext -> {
        User user = routingContext.user();
        user.isAuthorised("read", res -> {
            boolean hasPermission = res.result();
            if (hasPermission) {
                mongo.find("users", new JsonObject(), getUsersAsyncResultHandler(routingContext));
            } else {
                routingContext.fail(403);  // Failed creation
            }
        });
    });

但我也在使用事件总线进行其他交易。

             eb.consumer(FIND_USER_SERVER).handler(message -> {
        eb.send(UserMongoWorker.MONGO_FIND_USER, message.body(), res -> {
            message.reply(getResult(res));
        });
    });

我的问题是:如何从活动总线获取用户?就像我在routingContext中做的那样?

1 个答案:

答案 0 :(得分:1)

尚无内置支持。但您可以通过邮件头传播用户和其他上下文数据。这样您就不需要修改原始邮件正文。就像这样。

    Vertx.vertx().eventBus().send("Your address", "Your message",
            new DeliveryOptions().addHeader("userId", "Your user ID")
                    .addHeader("userType", "GUEST").addHeader("username", "Sohan"));

并像这样抓住你的用户。

    Vertx.vertx().eventBus().consumer("Your address", r -> {
        final String userId = r.headers().get("userId");
    });