问题标签 [vertx-eventbus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
47 浏览

vert.x - Vertx 事件总线未在单个 JVM 中通信

我有两个垂直如下

第一个verticle只是监听一个地址测试并回复消息

第二个verticle只是发送一个消息到地址test

两个 vertciles 使用一个通用的主类进行部署

当作为一个单独的程序运行并将verticles部署在不同的JVM中时,verticles可以使用事件总线相互通信,但是当一次使用公共类部署两个verticles时不起作用,出现以下错误

非常感谢任何帮助。提前致谢。

0 投票
0 回答
145 浏览

vert.x - 未在使用 vertx eventbus 的新 svelte 应用程序中定义进程

创建了一个新的苗条应用程序:

将此包添加@vertx/eventbus-bridge-client.js为依赖项。

App.svelte 看起来像这样:

我启动了 svelte 应用程序,yarn dev这就是我在浏览器控制台中看到的内容:

为什么 svelte bundle 寻找进程?

PS:后端使用vertx4事件总线桥: https ://vertx.io/docs/vertx-web/java/#_sockjs_event_bus_bridge

0 投票
2 回答
654 浏览

java - 为什么 Vertx 事件总线在高负载下会阻塞?

我正在尝试通过这样的 Vertx 事件总线(与 Hazelcast 集群)发送大量消息而不会阻塞:

当计时器数量较少时,它可以正常工作,但在大约 100 个计时器时,我会收到此错误。

我想知道如何在不阻塞的情况下扩展到 100K 事件/秒(作为参考,我编写了一个可能超过这个数字的 Vertx WebSocket 测试)。

如果不可能,我想了解什么是阻塞 - 看起来它是这个类中的东西:https ://github.com/eclipse-vertx/vert.x/blob/master/src/main/java/io/vertx /core/eventbus/impl/clustered/Serializer.java

供参考 - 此代码不会阻塞 - 即使有 1000 个计时器:

2020 年 12 月 15 日上午 10:54:38 io.vertx.core.impl.BlockedThreadChecker 警告:线程 Thread[vert.x-eventloop-thread-1,5,main] 已被阻止 36794 毫秒,时间限制为 2000 毫秒io.vertx.core.VertxException:线程在 io.vertx.core.impl.future.PromiseImpl.addListener(PromiseImpl.java: 23) 在 io.vertx.core.impl.future.PromiseImpl.onComplete(PromiseImpl.java:23) 在 io.vertx.core 的 io.vertx.core.impl.future.FutureImpl.onComplete(FutureImpl.java:133) .spi.cluster.impl.selector.Selectors.withSelector(Selectors.java:48) 在 io.vertx.core.spi.cluster.impl.DefaultNodeSelector.selectForSend(DefaultNodeSelector.java:42) 在 io.vertx.core.eventbus .impl.clustered.ClusteredEventBus$$Lambda$1065/195695453.accept(未知来源)在 io.vertx.core.eventbus.impl.clustered。Serializer$SerializerQueue$SerializedTask.process(Serializer.java:147) 在 io.vertx.core.eventbus.impl.clustered.Serializer$SerializerQueue.checkPending(Serializer.java:94) 在 io.vertx.core.eventbus.impl。 clustered.Serializer$SerializerQueue.add(Serializer.java:114) 在 io.vertx.core.eventbus.impl.clustered.Serializer.queue(Serializer.java:65) 在 io.vertx.core.eventbus.impl.clustered。 ClusteredEventBus.sendOrPub(ClusteredEventBus.java:172) 在 io.vertx.core.eventbus.impl.OutboundDeliveryContext.next(OutboundDeliveryContext.java:127) 在 io.vertx.core.eventbus.impl.EventBusImpl.sendOrPubInternal(EventBusImpl.java: 394) 在 io.vertx.core.eventbus.impl.EventBusImpl.send(EventBusImpl.java:103) 在 io.vertx.core .eventbus.impl.EventBusImpl.send(EventBusImpl.java:97) 在 io.vertx。example.EBtestClient.lambda$start$0(EBtestClient.java:22) at io.vertx.example.EBtestClient$$Lambda$1056/1487417027.handle(Unknown Source) at io.vertx.core.impl.VertxImpl$InternalTimerHandler.handle( VertxImpl.java:939) 在 io.vertx.core.impl.VertxImpl$InternalTimerHandler.handle(VertxImpl.java:910) 在 io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:52) 在 io.vertx .core.impl.ContextImpl.emit(ContextImpl.java:294) 在 io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:24) 在 io.vertx.core.impl.AbstractContext.emit(AbstractContext.java :49) 在 io.vertx.core.impl.VertxImpl$InternalTimerHandler.run(VertxImpl.java:933) 在 io.netty.util 的 io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:24)。 concurrent.PromiseTask.runTask(PromiseTask.java:98) 在 io.netty.util.concurrent.ScheduledFutureTask。在 io.netty.util.concurrent.SingleThreadEventExecutor.runAllTask​​s(SingleThreadEventExecutor.java:472) 在 io.netty.util.concurrent.SingleThreadEventExecutor.runAllTask​​s(SingleThreadEventExecutor.java:472) 在 io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) 运行(ScheduledFutureTask.java:176) .channel.nio.NioEventLoop.run(NioEventLoop.java:500) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap .java:74) 在 io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) 在 java.lang.Thread.run(Thread.java:748)在io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) 在io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) 在io 运行(NioEventLoop.java:500) .netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) 在 java.lang.Thread.run(Thread.java:748)在io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) 在io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) 在io 运行(NioEventLoop.java:500) .netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) 在 java.lang.Thread.run(Thread.java:748)

0 投票
0 回答
187 浏览

authentication - Vertx Sockjs Eventbus 处理程序授权

我正在建立一个社交平台,刚刚开始使用 websocket 部分。我无法理解将我的身份验证连接到 Vert.x SockJsHandler 的位置。我在这里通过 vertx.createSockJsServer 找到了一个使用“SockJsServer”的代码示例,但在当前版本中似乎不存在:

https://github.com/michalboska/codingbeer-vertx/blob/auth-experiment/src/main/java/ch/erni/beer/vertx/HTTPServerVerticle.java

我在当前版本中知道的唯一钩子是:

我看到event.socket().webUser() and .webSession()存在,但不清楚如何/在哪里设置。所以我的问题是,我是否需要仅在初始握手时创建一个身份验证处理程序,如果需要,在哪里?如果 js 客户端需要接收通知,比如来自特定聊天室的消息,他们是“chat123”的成员,我应该为 chat123 注册唯一的处理程序,还是以某种方式遍历 event.socket().webUser() 以获取每个有效的 id时间?

大多数 vert.x 文档都处于离线状态,新站点正在迁移到 vert.x 4,因此目前很难找到信息。

0 投票
1 回答
324 浏览

mockito - 你能在 Quarkus 测试中监视 Vert.x 事件总线吗?

有人知道在 Quarkus 测试中监视 Vert.x 事件总线的方法吗?理想情况下,我想断言,在服务层的方法中,我们将事件发送到正确的地址,但有人知道这是否可能吗?

如果我只是尝试使用,@InjectMock我会收到以下错误

0 投票
1 回答
110 浏览

vert.x - Vert.x SockJS Socket `.webUser()` 始终为空

我正在关注 Vert.x 4 的SockJS 文档,并注意到SockJSSocket我的处理程序中的每个都有一个.webSession()和一个.webUser(). 但是,除了.webSession().id()

我在此套接字处理程序所在的子路由器上注册了一个 AuthHandler,但我前端的 SockJS 客户端无法在 HTTP 升级请求中发送凭据。

我应该如何填充这些字段以供使用?

0 投票
1 回答
315 浏览

java - Vertx executeBatch 不返回所有行

我正在使用 vertx JDBC 客户端池并尝试向表中插入多条记录。插入成功,但插入的记录不返回,而只返回第一条记录。

使用插入多条记录的代码batchExecute

输出

表有四列,其中一列是自动递增的,这就是为什么上面的代码有 3 列。

我在这里错过了什么吗?

0 投票
1 回答
124 浏览

vert.x - Vertx 无法自动处理客户端的内部代码错误

我有一个接受 REST 请求的 Verticle,通过事件总线从其他 Verticle 获取数据并响应客户端。

当引发异常时,它会在我在 vertx 实例中设置的异常处理程序中打印,但之后 vertx 不会立即向客户端报告异常,而是等待超时(30 秒)发生。

我尝试将错误处理程序附加到路由器对象并将故障处理程序附加到路由对象,但没有任何帮助立即向客户端报告异常。我知道我可以尝试 catch 并在 catch 块中报告错误。但是我想知道是否有任何其他方法来处理这个问题,比如 Servlet 或 Spring MVC 报告给客户端,即使代码中没有处理异常。

0 投票
1 回答
122 浏览

vert.x - vertx 中的 ScheduledExecutorService.scheduleWithFixedDelay 用法

我想安排一个在 task完成后定期执行的任务。以前我使用过ScheduledExecutorService.scheduleWithFixedDelay,但现在在 vertx 中我正在考虑它是否会导致任何问题,因为 vertx 已经将线程用于事件循环和工作线程。

我检查了Vertx.setPeriodic,但这只是定期执行,没有检查或等待任务完成,然后再安排其他任务。

通过目前探索的所有选项,我有一个解决方法,Vertx.setTimer用于安排任务,完成后我在处理程序中再次调用 Vertx.setTimer。

在高层次上,调度任务将从一张表中查询记录并更新另一张表。

谁有其他更好的解决方案,请指导我。

Vertx 版本 - 3.9.4

0 投票
1 回答
178 浏览

design-patterns - Vert.x 事件总线性能问题(设计问题)

我仍然熟悉 vert.x。来自 Spring boot 和 Spring webflux 背景,我想尝试一些我以前在 Spring 生态系统中做的基本东西。

所以我的想法是编写一个通过控制器公开的 api,它将实际工作委托给服务。我能想到在 vert.x 世界中实现这一点的唯一方法是利用事件总线。在这里,我KeyValueServiceVerticlegetKeyValues方法应该从发布者 () 获取键值列表,keyValueRepository.findAllItems().items()并通过事件总线将它们发送回原始事件发布者 api。我确实得到了预期的结果(键值列表),但不知何故我对性能不满意。我在 spring webflux 和 vert.x 的等效代码中添加了一些负载,并且我的 webflux 实现总是表现更好(更高的 RPS)。相关存储库:https ://github.com/tahniat-ashraf/spring-boot-webflux-vert.x-comparison

我是否在某处阻止了代码?有没有更好的 vert.x 方法来实现我想要实现的目标?

相关代码:

公共类 KeyValueController 扩展 AbstractVerticle {