问题标签 [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.
gradle - 垂直x。如何在具有多个模块的项目中启用自动重新部署?
我们如何在使用时为多个模块启用自动重新部署Vert.x
?
例如,如果我们有这样的结构:
其中main
模块是用 Java 编写的,而kotlin
模块是用 Kotlin 编写的。
我们settings.gradle
可以有类似的东西:
可以有类似的main/build.gradle
东西:
我们如何正确配置我们的项目,以便当我们更改模块main
或kotlin
模块中的某些文件时重新部署垂直?
vert.x - 使用 Vert.x 事件总线时没有地址“演示”的处理程序
我正在做一个关于如何使用 Vert.x 事件总线的演示。但是,消息不会发送给消费者。我得到的只是
没有地址 hello 的处理程序
当我调用服务时,这是消费者,这是我正在遵循的确切示例,以及我是如何运行它的。
我运行带有集群标志的verticle,如示例中所述,
mvn compile vertx:run -Dvertx.runArgs="-cluster -Djava.net.preferIPv4Stack=true
下面是第一个verticle的日志
这是向消费者发送一些消息的第二个 Verticle,它是一个在本地单独运行的不同项目。
我正在使用以下命令运行。
mvn compile vertx:run -Dvertx.runArgs="-cluster -Djava.net.preferIPv4Stack=true"
尝试在http://localhost:8082/上调用应用程序,我仍然得到 No handlers for address hello
我已经尝试过了,但是我已经添加了集群标志并且它不起作用。谢谢。
下面是我在两种服务中使用的 jgroups.xml 作为评论的回复,仍然非常感谢任何帮助。它在我的资源文件夹中
kotlin - vert.x 关于网络服务器的概念?
我不太明白 vert.x 是如何应用于网络服务器的。
我所知道的网络服务器概念是基于线程的。
- 您启动您的网络服务器,然后它正在运行。
- 然后对于每个连接的客户端,您都会获得一个套接字,然后将其传递给它自己的线程处理程序。
- 然后线程处理程序处理这个特定套接字的任务。
因此明确定义了哪个线程为哪个套接字工作。但是,对于每个套接字,您都需要一个新线程,从长远来看,这对于许多套接字来说是昂贵的。
然后是 vert.x 提供的基于事件的概念。到目前为止,我已经理解,它应该像这样工作:
- Vertx 实例部署 Verticle。
- Verticle 在后台线程中运行,但并不是每个 Verticle 都有自己的线程。例如,一个 Vertx 实例中可能部署了 1000 个 Verticle,但 Vertx 实例仅处理 8 个线程(nr of cores * 2)。
- 然后是事件循环。我不确定它们是如何指代verticles的。我读过每个verticle都有2个事件循环,但真的不知道它是如何工作的。
作为网络服务器示例:
此 WebServer 可以在 Vertx 实例中多次部署。看起来,每个 WebServer 实例都有自己的线程。当我尝试连接 100 个客户端并回复一个简单的响应时,似乎每个客户端都是同步处理的。因为当我在每个服务器处理程序中执行 Thread.sleep 语句时,每秒一个客户端都会收到响应。但是,所有服务器处理程序都应该开始它们的 1 秒睡眠,然后在此时间之后几乎相同地回复所有客户端。
这是启动 100 个客户端的代码:
有人知道对此的解释吗?
kotlin - 如何在不同的事件循环上启动客户端?
我正在创建一个测试应用程序,假设与服务器有很多连接。当我从我的 Verticle 创建一个客户端时,它总是在同一个线程上处理连接和消息。
当我创建我的verticle时,我设置了
options.setEventLoopPoolSize(4)
所以我希望它循环到 4 个事件循环,因为我想拥有数百万个连接。
我正在做
2019-06-04 17:30:06,479 INFO [vert.x-eventloop-thread-0] MainVerticle:连接在 - Thread[vert.x-eventloop-thread-0,5,main] io.vertx.core.impl .EventLoopContext@150049b3
总是在同一个线程上......如何在不同的事件循环上启动连接
rx-java2 - 使用 RxJava 遍历 Vertx JsonArray
我有一个消耗传入消息的verticle。每条消息都是一个 vertx JsonObject
,其中包含一个 vertx JsonArray
。我想为这个数组中的每个元素执行逻辑。逻辑本身包含在一个单独的 Verticle 中。这第二个垂直使用rxVertx
. 它定义了几个消费者,每个消费者都委托给单独的方法,所有这些方法都返回一个Observable
.
我的问题是:如何:
- 遍历每个元素
JsonArray
- 将每个元素传递给与
Observables
.
在第一个verticle中,尝试了以下方法:
调用flatMapSingle
无法编译,因为:
这样做的正确方法是什么?非常感谢
rx-java2 - 使用 Vertx JsonArray 和 RxJava Observables
一个 vertxJsonObject
包含一个 vertx JsonArray
,类似于:
使用数组创建 RxJava 的正确方法是什么Observable
,以便 observable 将分别处理数组中的每个元素。尝试了以下方法:
但是使用上述方法,数组不会分成单独的元素。谢谢
rx-java2 - RxJava - 在第二个 flatMapSingle 中检索 Observable 中的条目
我们有一个 vertx verticle,它接收一个 id 并使用它来查看数据库中是否存在具有该 id 的实体。它包含以下逻辑:
另一个 Verticle 有一个 Observable,它处理一个 id 的列表。它用于rxSend
将列表中的每个 id 传递给第一个 Verticle 以进行数据库查找:
有了上面,很容易处理在数据库中找到与 id 关联的实体的情况,因为第一个 vertcle in onNext()
,返回实体。问题是针对第二种情况,当没有实体存在并且第一个 verticle 返回时onNext(null)
。在这种情况下,如何在第二种情况下检索flatMapSingle
当前正在处理的 observable 中的项目(即id
没有关联的数据库实体)?或者有没有更好的方法来构建代码?
谢谢
json - 访问 vertx JsonObject 中的数组元素
鉴于以下情况io.vertx.core.json.JsonObject
:
由于事先不知道包含数组 (
111
和222
) 的外部元素的名称,因此访问每个数组的元素的正确方法是什么,例如{"A":"a1"}
一旦数组的元素可用作集合,该集合如何转换为 rxJava
Observable
。尝试了以下方法:列表列表 = arrayElements.stream().collect(Collectors.toList());
Observable observable = Observable.fromIterable(list);
但是,问题是流中的每个元素都表示为java.util.LinkedHashMap.Entry
,例如A=a1
,而需要的是保留原始 Json 表示。
谢谢
java - Vert.x 线程命名 - “vert.x-worker-thread-...”
我正在我的一个记录警告的工人 Verticle 中进行阻塞服务调用。这是通过增加时间限制来“解决”的,但是,我更好奇如何读取日志行中线程的命名 - vert.x-worker-thread-3,5,main
。完整的日志是这样的——
说明什么3,5,main
?它是来自主垂直的某种痕迹吗?谢谢。
java - 使用 POST 使用 Content-Type:application/x-www-form-urlencoded (Content-Type:application/json 工作正常)的“路由中出现意外异常”
我正在使用“vert.x”创建一个除了“Content-Type:application/x-www-form-urlencoded”之外的发布请求。并得到“路由 java.lang.NullPointerException 中的意外异常”,但是当我删除内容类型时,相同的请求工作正常。
我正在使用 vert.x 3.3.3 并尝试使用垂直创建路线。