Java Vertx Eventbus桥,客户端具有角度

发布于 2025-02-07 04:55:55 字数 1500 浏览 1 评论 0原文

我已经在我的客户端(Angular)实现了VERTX EventBus Bridge,并且可以进行一些扩展。我的意思是有时我会从我的Java Vertx应用程序中获取发送消息,但有时我会遇到以下错误。有人可以帮我调试还是告诉我为什么我会遇到这个错误。由于某种原因,我有一种感觉,客户没有注册。

> ERROR Error: INVALID_STATE_ERR
>     at EventBus.registerHandler (vertx-eventbus.js:279:13)
>     at SafeSubscriber._next (core.service.ts:83:16)
>     at SafeSubscriber.__tryOrUnsub (Subscriber.ts:265:10)
>     at SafeSubscriber.next (Subscriber.ts:207:14)
>     at Subscriber._next (Subscriber.ts:139:22)
>     at Subscriber.next (Subscriber.ts:99:12)
>     at FilterSubscriber._next (UnsubscriptionError.ts:101:24)
>     at FilterSubscriber.next (Subscriber.ts:99:12)
>     at BehaviorSubject._subscribe (BehaviorSubject.ts:27:18)
>     at BehaviorSubject._trySubscribe (Observable.ts:238:19)

错误中的代码指向我的Angular Code IE EventBus.RegisterHandler中的第83行。

hostJobProgressSession(){
    console.log('Inside hostJobProgressSession!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
    console.log(this.eventBusService.getEventBus());
    this.eventBusService.getEventBus().subscribe(eventBus => {
      eventBus.registerHandler('update.job.onclient', (error, message) => {
        console.log('Inside registerHandler() -- received a message from server !! : ' + JSON.stringify(message.body));
        this.progressValue.next(message.body);

        if(error)
        {
          console.log('ERROR'+error)
            
      });
    })
  }

感谢您的帮助!

I have implemented vertx eventbus bridge on my client side(Angular) and it works to some extend. I mean some time I get the send message from my Java Vertx application on the client side but some times I get this below error. Can someone please help me to debug or tell me why I get this error. I have a feeling for some reason the client is not registering.

> ERROR Error: INVALID_STATE_ERR
>     at EventBus.registerHandler (vertx-eventbus.js:279:13)
>     at SafeSubscriber._next (core.service.ts:83:16)
>     at SafeSubscriber.__tryOrUnsub (Subscriber.ts:265:10)
>     at SafeSubscriber.next (Subscriber.ts:207:14)
>     at Subscriber._next (Subscriber.ts:139:22)
>     at Subscriber.next (Subscriber.ts:99:12)
>     at FilterSubscriber._next (UnsubscriptionError.ts:101:24)
>     at FilterSubscriber.next (Subscriber.ts:99:12)
>     at BehaviorSubject._subscribe (BehaviorSubject.ts:27:18)
>     at BehaviorSubject._trySubscribe (Observable.ts:238:19)

and the code in the error is point to line 83 in my Angular code i.e. eventBus.registerHandler.

hostJobProgressSession(){
    console.log('Inside hostJobProgressSession!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!')
    console.log(this.eventBusService.getEventBus());
    this.eventBusService.getEventBus().subscribe(eventBus => {
      eventBus.registerHandler('update.job.onclient', (error, message) => {
        console.log('Inside registerHandler() -- received a message from server !! : ' + JSON.stringify(message.body));
        this.progressValue.next(message.body);

        if(error)
        {
          console.log('ERROR'+error)
            
      });
    })
  }

I will appreciate your help!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

如若梦似彩虹 2025-02-14 04:55:55

不知道它是否有所不同,但是理想情况下,您应该在eb.onopen上注册处理程序,如下所示:

import EventBus from 'vertx3-eventbus-client';

const eb = new EventBus("http://localhost:8080/eventbus");

eb.onopen = () => {
  eb.registerHandler('update.job.onclient', function(error, message) {
    console.log('received a message: ' + JSON.stringify(message));
  });
}
eb.onclose = (param) => {
  console.log('closed', param)
}

export default eb;

在服务器端,您需要bridgeoptionssockjshandler(以及可能的CORS处理程序)

...
Router router = Router.router(vertx);

BridgeOptions opts = new BridgeOptions().addOutboundPermitted(
      new PermittedOptions().setAddress("update.job.onclient"));

SockJSHandler ebHandler = SockJSHandler.create(vertx).bridge(opts);
router.route("/eventbus/*").handler(ebHandler);
...
vertx.createHttpServer().requestHandler(router::accept).listen(8080);

Dont know if it makes a difference but ideally you should register the handler on eb.onopen, as follows:

import EventBus from 'vertx3-eventbus-client';

const eb = new EventBus("http://localhost:8080/eventbus");

eb.onopen = () => {
  eb.registerHandler('update.job.onclient', function(error, message) {
    console.log('received a message: ' + JSON.stringify(message));
  });
}
eb.onclose = (param) => {
  console.log('closed', param)
}

export default eb;

on the server side, you will need BridgeOptions. SockJSHandler (and likely CORS handler)

...
Router router = Router.router(vertx);

BridgeOptions opts = new BridgeOptions().addOutboundPermitted(
      new PermittedOptions().setAddress("update.job.onclient"));

SockJSHandler ebHandler = SockJSHandler.create(vertx).bridge(opts);
router.route("/eventbus/*").handler(ebHandler);
...
vertx.createHttpServer().requestHandler(router::accept).listen(8080);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文