javascript 中的 Vertx eventBus 参考

Vertx eventBus reference in javascript

我是 运行 一个 spring 启动服务器,在内部集成了 vertx,如下所示

在我的 spring 引导应用程序中 class

@Bean
public Vertx vertx() {
    return Vertx.vertx();
}

在我的 spring 控制器中

@RequestMapping("/")
public String home() {
    EventBus eventBus = vertx.eventBus();

    while (true) {
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        eventBus.publish("CNotifications", "message sent : {}" + message_counter++);
    }
}

如何在客户端 (angular) 获取事件总线的句柄?我试过 angular-vertx 模块,如下所示

controllers.controller('indexCtrl', function ($scope, vertxBus) {

    angular.element(document).ready(function () {
        vertxBus.registerHandler("CNotifications", function(message) {
            console.log('Received message ' + message);
        });
    });
});

但是报错说没有这样的函数registerHandler。我可以使用另一个 angular 顶点的包装器模块吗?或者我可以修复上面的代码以使其工作吗?我在我的 index.html

中添加了这些下面的 js
<script type="text/javascript" src="lib/vertx/sockjs.min.js"></script>
<script type="text/javascript" src="lib/vertx/vertxbus-3.1.0.js"></script>
<script type="text/javascript" src="lib/vertx/angular-vertx.min.js"></script>

你问了好几个问题..

Vert.x 在 Spring 启动

首先:如果不需要Spring开机,可以直接用Vert.x itself打开服务器。

但如果需要此设置:请查看 full working official demo using Spring Boot by Vert.x itself at GitHub

评论element.ready

您在控制器中使用了 angular.element(document).ready。那没有任何意义。如果控制器已被调用(由 AJS),则文档显然已经准备好一段时间了。当然,它不会破坏您的代码,但不需要它。

AngularJS插件

angular-vertx 的作者有 cancelled his work on this prototype/project.

如果您在 AngularJS 上下文中需要一个很好的包装器,我建议您看一下 我的项目 angular-vertxbus:它提供了一个可重新连接的包装器和一个方便的服务 api 和承诺支持。