2015-12-21 2 views
3

У меня есть сервер java vertx и клиент JavaScript. Я хочу, чтобы создать шину событий под два раза, но VertX отвечают: Ошибка, полученное соединение: ACCESS_DENIEDVertx event bus 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\"}"); 

Есть ли у вас идея?

С уважением

ответ

1

Вы должны установить разрешения в 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));}); 

функция обратного вызова имеет два параметра: