问题标签 [vertx4]

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 投票
2 回答
1002 浏览

java - Vert.x 将 http 重定向到 https

我们已经用 Vert.x 4 重新编写了我们的 web 服务,我们非常满意。在将它们投入生产之前,我们希望保护它们并且我们正在尝试启用 https。这是主要的垂直:

这是 HTTP 服务器 Verticle 代码中最相关的部分:

上面的代码可以正常工作,因为我的网站可以通过https://website.ithttps://www.website.it访问 (使用letsencrypt 证书)。


问题是当我尝试访问http://website.ithttp://www.website.it时它不起作用(这意味着我看不到主页,因为服务器无法访问)。

如何将http://website.it重定向到 https//website.it?

我用谷歌搜索了很多,我设法找到的是:

  • 这个vertx 示例像我一样设置 HTTPS,但它没有提到重定向
  • 这个SO question 似乎告诉我该怎么做,但我不明白该怎么做,我不确定该设置是否必须进入 HttpServerOption 对象

也许是我的 https 配置错误?我在 IntelliJ IDEA(Maven 构建)和 Vert.x 4 最新版本上使用 Java 11。谢谢

0 投票
1 回答
106 浏览

java - Vertx 用户授权主体或属性

我在我的 API 上使用 Vertx 框架来授权 JWT 令牌。在用户获得授权并解密令牌后,我想访问令牌的内容,特别是令牌中的“userId”字段。

最初我使用reqas访问它RoutingContext

req.user().principal().getString("userId");

这会按预期工作,直到它在不同的机器上编译。当在不同的机器上编译时,req.user().principal()只包含字段access_token,包含仍然加密的 JWT。

解决方案是通过以下方式访问用户 ID

req.user().attributes().getJsonObject("accessToken").getString("userId");

我已经在 4 台不同的机器上对此进行了测试。其中 2 个使用主体工作,另外 2 个需要属性。似乎只在乎它在哪台机器上编译,而不在乎它在什么机器上运行。机器之间没有更改代码。Java、Maven 和 Vertx 版本每次都相同。

我在网上找到的一些解决方案只是检查所需字段是否主要,如果不使用属性。不过,这似乎是一个糟糕的解决方法。必须有适当的方法来访问它。

访问解码令牌中的值的正确方法是什么?为什么它似乎会根据编译机而改变?

0 投票
1 回答
210 浏览

vert.x - Vert.x——如何使用 Future 并行执行任务/方法

我是 Vert.x 异步编程的新手。我想知道如何使用期货并行运行多个任务。(与使用 Java 的 callable 类似)。

以下是我所拥有的,但任务是按顺序执行的。我错过了什么?

0 投票
0 回答
61 浏览

vert.x - vert.x zipkin 集成是否提供采样支持?

用例:

使用 vert.x 应用程序作为所有传入流量的 API 网关。想要通过 vert.x 对传入的请求进行采样

ZipkinTracingOptions 中的采样选项被硬编码为 Sampler.ALWAYS_SAMPLE 我觉得,我们应该为应用程序提供从外部提供采样器的能力,以便 Brave 支持的所有采样选项都可以在 ZipkinTracingOptions 中使用

vert.x 是否支持任何其他采样选项,或者它是否打算在未来这样做?

0 投票
1 回答
120 浏览

java - 为什么 Vert.x codegen 无法创建 rx-fied 类?

出于某种原因,我的基于 4.0.2 的代码不会使用 codegen 生成 rx-fied 服务版本。

虽然 VertxEBProxy 和 VertxProxyHandler 类都是按预期创建的。

这是一个演示项目:https ://github.com/ashertarno/playground

请参阅下面的所需依赖项:

在这种情况下会缺少什么?

0 投票
1 回答
122 浏览

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

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

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

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

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

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

Vertx 版本 - 3.9.4

0 投票
0 回答
68 浏览

sockets - Java Vertx NetClient NetServer 通信非常慢

我之前在 vertx 上编写了一个小系统,但直到现在才测试过 NetServer 和 NetClients 之间的通信。

即使我在本地编写了一个非常简单的程序,从 NetServer 向 NetClient 发送一条非常小的消息也需要 50-100ms。如果我删除了选项,情况会变得更糟。下面的例子。

与简单 Java ServerSocket/Socket 相同的测试情况以 0 毫秒的时间结束。

我阅读了大部分 vertx 文档,但没有发现任何提示我在这里遗漏的内容。

亲切的问候

0 投票
1 回答
158 浏览

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

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

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

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

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

0 投票
1 回答
312 浏览

vert.x - vertx 4.0.3 中的请求参数验证

vertx-Web-api-contracts在 vertx 3.0 中使用来验证我的查询参数和表单参数

HTTPRequestValidationHandlerParameterTypeValidator

代码示例:

在这里,我使用 ParameterTypeValidator 提供自定义逻辑来验证我的参数值。我正在使用 customTypeValidator,因为我需要对 ex 的参数值进行自定义值验证。我需要验证我的 ID 参数应该包含由_分隔的四个部分(part1_part2_part3_part4

现在,当我尝试迁移到vertx 4.0并被vertx-Web-api-contracts弃用时,我被迫使用vertx-web-validation,但是 web-validation 缺少像 api-contract-validations 这样的 custompropertyvalidation。

我想怎么做,

但我想知道如何传递/构建自定义模式,而不是使用自定义逻辑进行验证stringSchema()intSchema()早些时候我正在创建自定义类并实现 ParameterTypeValidator 以提供自定义验证逻辑(如IdTypeValidator())。

有什么方法可以通过网络验证实现相同的目标。

0 投票
1 回答
452 浏览

java - 什么是 Vert.x 垂直“实例”,它们与线程有什么关系?

在 Vert.x 应用程序中部署 Verticle 时,文档似乎非常不清楚 Verticle“实例”实际上是什么,以及它与线程和线程池的关系。事实上,与实际线程模型相关的任何事情都不清楚......

从文档中;

Vert.x 在这里的工作方式不同。每个 Vertx 实例都维护多个事件循环,而不是单个事件循环。默认情况下,我们根据机器上可用内核的数量来选择数字,但这可以被覆盖。

也来自文档;

要在 Vert.x 服务器中实例化的 Verticle 实例数。每个 Verticle 实例都是严格的单线程的,因此要跨可用内核扩展您的应用程序,您可能需要部署多个实例。如果省略,将部署单个实例。我们稍后将在本用户手册中详细讨论缩放。

假设我想部署一个简单的 REST API,它被编写为单个 Verticle,并且我想让它在可用的 CPU 内核上有效地扩展。我应该怎么办?

  • 我是否为每个 CPU 核心部署一个 Verticle 实例?
  • 我是否部署了单个垂直实例,至少根据文档的一部分,单个垂直实例已经维护了多个事件循环(因为我假设 1 个事件循环 = 1 个线程)?
  • 如果我部署 4 个 Verticle 实例,实际会创建/使用哪些线程和/或线程池?