问题标签 [vertx-verticle]
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.
java - 标准verticle和worker verticle的区别
我对 Vertx 中的标准 verticle 和 worker verticle 感到困惑。它们的用例是什么?
vert.x - Vertx - 用于事件处理的多个与单个 Verticle
设想
我在 Vertx 事件总线的特定“地址”中收到一条消息 - 该消息可以有四种类型。处理程序应处理消息并将结果发送到另一个事件总线“地址”,其处理程序将其发布到外部服务 api。
问题
如何为此设计Verticle?我在下面描述了两种方法——考虑到这将部署在 Kubernetes 中,哪一种更高效、更快并且能够很好地扩展。工人verticles怎么样?我还缺少其他任何有效的方法吗?
方法
- 为每种类型编写一个verticle,由一个事件总线消费者消费和处理这种类型。将处理后的数据发送到“external-service-call”地址。
- 只写一个 verticle - eventbus handler 可以根据消息的类型决定并调用适当的方法,最后将其发布到“external-service-call”地址。
据我了解,我可以通过部署该 Verticle 的多个实例来扩展第二种方法。通过缩放,我的意思是这可以同时接受和处理大量的音量?第一种方法怎么样?
你认为我应该知道的其他方法?
vert.x - 使用 Vertx 处理结果组 - 如何协调?
我有一个作业处理系统,其中每个作业都包含数千个需要不同策略才能完成的单独任务。单个任务构成了整个工作。如果所有任务都已完成,则将作业标记为成功完成并执行其他步骤,如果任何任务失败,则必须将作业标记为失败并执行其他步骤,如果作业超时,则必须标记作业失败并采取其他步骤。
一旦接收到作业的所有结果,就可以获取下一个作业。当前正在处理作业时,不应获取下一个作业。
这是流程的样子:
Job Polling Verticle 将作业发布到事件总线,Job Processing Verticle 将每个任务发布到事件总线。当作业策略完成时,它将任务结果发布到事件总线。
问题是我不知道在此模型中确定所有任务何时完成的正确方法。所有 Verticle 都是无状态的,Job Processing Verticle 不等待任何未来,即使 Job Results Verticle 是有状态的,它也不知道它应该期待多少结果。
我能想到的唯一方法是拥有一个全局有状态对象。但我不认为这是一个好的设计。
此外,我需要知道 Job 何时超时。也就是说,它运行的时间比它应该运行的时间长,我需要考虑它是失败的,记录它,然后继续。
我可以对全局状态执行此操作,但我再次认为这不是正确的解决方案。
这种垂直模式对我想要做的事情有意义吗?
elasticsearch - Vertx - 关闭连接 - JDBC 和其他
我有一个 Verticle,它使用来自事件总线的消息并处理它。我有一个关于何时应该关闭 JDBC 连接的问题。有2种方法
处理完消息后关闭连接。但这将非常昂贵,因为我每次都会打开/关闭连接。
相信 vertx 将在 verticle 停止/取消部署时关闭连接(实际上永远不会),并且只要连接打开,就不会有任何内存泄漏。我将在 start() 方法中打开连接,以便只要有消息可用。
另一方面,如果我有一个弹性搜索后端,并且我使用的是弹性搜索 SDK,它具有关闭客户端的特定方法,那么应该什么时候真正关闭连接?
groovy - 在 Groovy 中未调用 Vert.x Future/Promise 处理程序
我有一个非常小的 Verticle,它应该连接到数据库并定期轮询表并将对象发送到事件总线。到目前为止,我可以连接到数据库,但是之后的处理程序没有被执行,我的轮询计时器也没有启动。我想这是显而易见的,感谢每一个帮助。
我使用 Vert.x 3.8 Promises ,因为 Future 已被弃用(就像在该链接后面的示例中一样)。正如您在我的代码中看到的,使用不推荐使用的 Futures工作得很好!但是谁想要使用已弃用的代码,呵呵?要么我做错了什么,要么这是 Vert.x 中的错误,我不认为。
我的 Vert.x 是 3.8.1
vert.x - Vertx 多事件循环
我是 Vertx 的初学者,我使用这个链接作为入门代码。
但是,没有主文件,我看不到 MainVerticle 是如何部署的。我想为 MainVerticle 设置一些部署选项,但由于没有主文件;我该怎么做?
vert.x - 在 Vert.x web 中,多个请求会在同一个线程上交错
所以我知道在标准的 vert.x web 中,请求将始终在同一个线程上,即使它通过异步操作,除非你手动启动一个线程。我想弄清楚的是,是否可以在请求的整个生命周期中将安全信息保留在线程上。似乎不可能,因为从定义上看,线程将被重用,并且很容易在其上交错多个请求,但我想验证以防我遗漏了什么。
我的主要目标是让我的域可以使用安全信息,而不会强迫每个人都通过请求传递它并且可能会搞砸,因此提出了这个问题。
java - 垂直系统拥塞
有一个应用程序。它由许多 Verticle 组成。他们一个接一个地在一个链条中运行。以下每一项都是成功实施前一项的结果。很多。他们向外部系统提出几个请求。主会话以某个时间间隔开始。
我的问题是如果正在运行的会话没有时间完成会发生什么?它会停止吗?或者它会与下一个并行工作?如果两者都没有满足并且第三次会议开始?这一切都会导致系统过度过载吗?
java - 在 Vert.x 中加载非线程安全的原生库:是多实例 Verticle,仅限于自己的进程
我想编写一个使用 GraphViz 呈现图形的 Verticle。我想通过将本机(共享)库加载到我的 JVM 中并通过 JNI 调用它来实现。现在,GraphViz 本身不是线程安全的。总是在自己的线程中运行每个多实例 verticle 是不够的,我还必须确保每个 verticle 都有自己的本地代码实例,或者换句话说,每个 verticle 在单独的进程中运行,每个利用其中一个核心。
大多数对 Vert.x 的描述都说只谈论线程之间的隔离(不共享数据等)。我没有发现任何关于进程隔离的信息。
基本上,我正在寻找一个框架来创建几个 REST 服务器实例,所有实例都在同一个套接字上侦听或在前面使用负载均衡器,而不必自己编写任何代码。类似于 PM2 对 Node.js 所做的事情。我可以用 Vert.x 做到这一点吗?
我意识到这可能与 Vert.x 的精神背道而驰,因为核心文档清楚地表明:
每个 Vertx 实例都维护多个事件循环,而不是单个事件循环。默认情况下,我们根据机器上可用内核的数量来选择数字,但这可以被覆盖。
这意味着与 Node.js 不同,单个 Vertx 进程可以跨服务器扩展。
但是由于我使用的是本机库,每个 JVM 只能加载一次,并且在我的情况下不能同时执行,因此防止扩展到多个内核,我想我真的想要 Node.js 模式,只在 Java 中。
我的要求也比集群事件总线文档中描述的要简单得多,例如Zookeeper 示例,因为我不需要实例之间的通信。
javascript - 用 Java Vert.x 客户端替换 JavaScript SockJS 客户端
我在 java vertx 中有一个工作服务器和一个客户端,但是在 SockJS 中,我想在 java 中制作这个客户端,我怎样才能将它转换为 java:
我正在寻找的主要是vertx客户端连接到我的vertx服务器的基本启动代码