问题标签 [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 回答
77 浏览

asynchronous - 如何让 Vertx 处理程序在事件循环中更早地执行?

我正在使用 Vertx 3.5.0 并且对它非常陌生。当客户取消他们的请求时,我试图取消代码执行。

目前它已经设置到我们要做的第一件事是部署一个verticle来运行一个HttpServer,然后我们将所有的Routes添加到Router中。从这里开始,每个路由都有一个处理函数。在这个处理程序中,我正在尝试这个:

这是我见过的唯一真正捕获连接关闭的方法,但问题是它在事件循环中没有足够早地执行处理程序。因此,如果我在那里有任何日志,它将如下所示:

...[vert.x-eventloop-thread-0].....

...[vert.x-eventloop-thread-0].....(假设我此时取消了请求)

...[vert.x-eventloop-thread-0].....

...[vert.x-eventloop-thread-0].....(在等待异步数据库调用之前定期执行的最终日志)

...[vert.x-eventloop-thread-0].....(closeHandler代码的执行)

我希望 closeHandler 代码在事件实际发生时中断进程并基本上执行。

无论我何时取消请求,这似乎总是如此,所以我想我错过了一些关于 Vertx 如何处理异步的东西。

我已经尝试通过一个worker Verticle、Router对象的blockingHandler以及HttpServer对象的connectionHandler执行closeHandler代码。所有人都得到了相同的结果。

主要的代码执行也不是由一个worker Verticle执行的,只是一个普通的。

谢谢!

0 投票
1 回答
194 浏览

vert.x - 如何更改 quarkus-vertx eventBus ClusterManager 选项

我想通过在 Quarkus 中使用 hazelcast-kubernetes 在 k8s 上配置 vertx。

我需要像这样配置事件总线:

如何将自定义配置的 VertxOptions 传递给 Quarkus-vertx?

我在VertxCoreRecorder类中发现有List<Consumer<VertxOptions>>参数,但我不知道如何创建和传递自己的Consumer<VertxOptions>实现。

0 投票
1 回答
329 浏览

vert.x - 如何使用opentracing或opentelemetry在vertx中的eventbus中实现跟踪?

该网页没有给出太多相同的描述,如果可能的话分享一些例子。

这是我尝试过但没有按预期工作的示例实现

0 投票
1 回答
158 浏览

vert.x - 集群顶点的多个或单个实例

我正在使用 vertx4 开发微服务,每个服务由多个 verticles 组成,并且使用以下代码将所有服务都部署为 clustered(hazelcast) verticles。

我为服务中的每个顶点调用上面的代码,并创建了多个顶点对象或实例。

  1. 在集群中部署verticles的正确方法是什么?
  2. 我应该从 clusteredVertx 获取一个顶点对象并使用它部署多个顶点吗?
  3. 拥有多个 vertx 实例的优点和缺点是什么?

我已经阅读了 vertx 文档,但我无法特别理解集群。我什至检查了一些 vertx 源代码,例如Launcher类,但没有任何帮助我得到答案。

0 投票
1 回答
78 浏览

hazelcast - Vertx 集群事件总线未删除 Kubernetes 滚动部署中的旧节点

我有两个在集群中运行的 vertx 微服务,并使用本地云中的无头服务(链接)相互通信。每当我进行滚动部署时,我都会面临服务中的连接问题。当我分析日志时,我可以看到旧节点/pod 已从集群列表中删除,但事件总线并未将其删除并以循环方式使用它。

下面是部署前的成员组信息

开始部署时,pod 2 会从成员列表中删除,

并添加了新成员,

但是,当对已部署的服务发出请求时,虽然旧的 pod 已从成员组中删除,但事件总线正在使用旧的 pod/服务引用(ac0dcea9-898a-4818-b7e2-e9f8aaefb447),

我查看了滚动部署的官方文档,我的部署似乎遵循文档中提到的两个关键事项,只删除了一个 pod,然后添加了新的。

我正在使用 vertx 4.0.3 和 hazelcast kubernetes 1.2.2。我的 Verticle 类正在扩展 AbstractVerticle 并使用,

对不起,很长的帖子,非常感谢任何帮助。

0 投票
1 回答
33 浏览

java - 是否存在 Vert.x MessageConsumer 无法从事件总线注销的情况?

万一出现故障AsyncResult,再次调用可能是不明智的unregisterConsumer,也许是vertx.setTimer(5000, id -> unregisterConsumer(mc));

0 投票
1 回答
178 浏览

vert.x - 如何根据条件跳过vertx断路器中的重试

我目前正在Vertx CircuitBreaker尝试重试请求事件总线。基于ReplyException.ReplyFailure我想跳过或避免重试。

例如,当事件总线响应时我不想重试ReplyFailure.RECIPIENT_FAILURE,因为这种错误不是应用程序错误,而是逻辑验证失败。

下面是我的代码,

使用如下断路器,

基于事件我不想断路器放弃重试。我尝试检查事件状态,然后调用 promise.complete 方法并出现异常,尽管断路器将其识别为失败并开始重试。如何告诉断路器停止重试?

我认为断路器对象可能有

  1. 一种关闭它的方法
  2. 停止重试的方法
  3. 一种增加失败的方法

更新 1 ---------------------

我自己实现了重试部分,为了使操作超时,我可以设置计时器并检查操作的状态,如果操作没有完成,我可以启动重试逻辑。但我不知道如何在重试下一个操作之前取消操作,例如如何取消事件总线请求?

更新 2 -----------------

Vertx 断路器也没有处理超时操作。在重试进行时,我可以看到来自事件总线的较旧响应。如果处理不当,这可能会混淆应用程序逻辑。

0 投票
1 回答
133 浏览

java - ZipOutputStream 阻塞 Vertx 事件循环

我正在处理一个场景,我正在读取目录中的文件,然后创建一个 zip 文件。但是这个操作有时会阻塞 Vertx 线程,我在 Vertx 跟踪中收到以下异常:

以下是我创建 zip 文件的方法

谁能提供任何建议,以确保我不会阻止 Vertx 上的主事件循环

0 投票
1 回答
31 浏览

java - EventBus.localConsumer 是否需要 MessageConsumer.completionHandler?

0 投票
1 回答
252 浏览

java - 是否改变了 Quarkus 1.13.7 和 Quarkus 2.0.0 之间处理 Vertx eventBus 多线程的方式?

我不确定这是某种错误还是只是我身边缺少的配置,但是在 Vertx eventBus 将线程分配给“@ConsumeEvent”方法的方式上,我得到了不同的行为。

在 Quarkus 版本 1.13.7.FINAL 和更早版本中,如果池有足够的线程,Vertx 会为每个消费者方法绑定一个事件循环线程。但在 Quarkus 2.0.0 中,每条消息都由一个或两个线程处理,使得执行几乎是同步的。这种行为在 VM 或本机模式下是相同的。

我做了一个愚蠢的项目来说明这一点:https ://github.com/AngelPerz/test-vertx-q2

在这个项目中,当收到对localhost:8080/test的调用时,它通过 eventBus 使用 .publish() 方法向 3 个消费者发送一些消息,通过简单的等待模拟每个消费者的一些工作,并将完成发送到最终收集器也通过 eventBus。

对于Quarkus 1.13.7.FINAL中的这种情况,相同的应用程序同时执行所有内容:

正如我们所见,有 5 个不同的线程执行测试,但在Quarkus 2.0.0.FINAL中运行相同的代码,只有一个线程执行所有操作:

1.13.7.FINAL的执行时间差为955ms,2.0.0.FINAL的执行时间差为2592ms;如果它可能相关,则使用 GraalVM 21.0.0.2 java11 进行了测试