Vertx事件总线访问被拒绝。

3
英译中:

我有一个 Java Vertx 服务器和一个 JavaScript 客户端。我想在两者之间创建一个事件总线,但 Vertx 响应:连接上收到错误:access_denied

JavaScript 代码:

var eventBus = new vertx.EventBus("http://localhost:8989/eventbus");
eventBus.onopen = function () {
console.log("Event bus connected !");
console.log(eventBus);

eventBus.registerHandler("http://localhost:8989/eventbus/news-feed", function (message) {
    console.log("registred" + message.body());
});

Java代码:

SockJSHandler bridge = SockJSHandler.create(vertx).bridge(new BridgeOptions());
router.route("/eventbus/*").handler(bridge);
router.route().handler(StaticHandler.create());// otherwise serve static pages
HttpServer httpServer = vertx.createHttpServer();
httpServer.requestHandler(router::accept);
httpServer.listen(Servers.SERVER_PORT);
vertx.setPeriodic(1000, event -> {
vertx.eventBus().publish("news-feed", "{\"c\":\"df\"}");

你有一个想法吗?

问候

2个回答

3

您需要在BridgeOptions中设置权限:

BridgeOptions options = new BridgeOptions()
.addInboundPermitted(new PermittedOptions().setAddress("news-feed"))
.addOutboundPermitted(new PermittedOptions().setAddress("news-feed"));

此外,您的JavaScript代码无法注册整个地址:
eventBus.registerHandler("news-feed", ...

0
.addOutboundPermitted(new PermittedOptions().setAddress("news-feed"));

是必需的,而

 eb.registerHandler('news-feed', function(error, message) {
      console.log('received a message: ' + JSON.stringify(message));});

回调函数需要两个参数


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接