microservices - 我需要构建一个 Vert.x 虚拟主机服务器,将流量引导到其他 Vert.x 应用程序。这种应用间通信是如何实现的?

标签 microservices vert.x

Vert.x virtual host server for other vert.x apps

如上所示,我需要构建一个 Vert.x Java 应用程序,该应用程序将作为 HTTP 服务器/虚拟主机(TLS Http 流量、Web 套接字流量),它将重定向/ channel 特定域流量到其他 Vert.x Java 应用程序上运行的同一台服务器,每个服务器都有自己的 JVM。

我已经阅读了几天,但我仍然不确定如何处理任务的各个方面。

我所知道或有过的经验:

  • 创建 HTTP 服务器等
  • 使用 Vert.x VirtualHost 处理程序“处理”传入流量
    特定域

  • 我不知道的:
  • 如何将域的流量“重定向”到另一个 Vert.x 应用程序(这个
    其他 Vert.x 应用程序也将运行在同一台服务器上,单独运行
    JVM)。

    - 当然,这个“其他”Vert.x 应用程序需要响应 HTTP
    请求等。我采用什么 Vert.x 机制来实现这一点
    任务的方面?

  • 以下任何概念是解决方案的一部分吗?我不熟悉这些概念以及它们如何构成或不构成解决方案的一部分。:
  • 使用 -cluster 选项运行每个 Vert.x 应用程序?
  • Vert.x 流?
  • Vert.x 泵?
  • 最佳答案

    有多种方法可以让您的微服务相互通信,您的所有应用程序都在同一台服务器上运行这一事实并没有太大变化,但它使数字 2.)易于配置

    1.) 基于休息的客户端 - 服务器通信

  • 主机和应用程序都有一个网络服务器
  • 当您处理主机上的传入请求时,您只需使用 HttpClient
  • 调用另一个应用程序

    enter image description here

    通常,所有服务都通过 service discovery 找到彼此的地址.
    例如:每个服务在中央注册表中注册他的地址,然后其他服务使用这个中央注册表来查找地址。

    注意:这对您来说可能有点矫枉过正,您只需配置其他服务的地址即可。

    2.) 您以集群模式启动 vertx 微服务
  • 然后事件总线在服务之间共享
  • 对于所有传入请求,您在事件总线上发送广播
  • 负责应用回复消息

  • enter image description here

    如需进一步阅读,您可以查看 https://vertx.io/docs/vertx-hazelcast/java/#configcluster .您使用 -cluster 选项启动项目并在 xml 配置中定义集群。我认为默认情况下它通过本地广播找到服务。

    3.) 您使用消息代理,如 RabbitMq 等。
  • 您的所有应用程序都连接到中央消息代理
  • 当主机收到新请求时,它会向消息代理
  • 发送一条消息。
  • 负责的应用然后监听相关消息并回复
  • 主机收到消息代理的回复

  • enter image description here

    对于某些消息代理,例如 kafka、camel、zeromq,已经有许多现有的 vertx 客户端:

    https://github.com/vert-x3/vertx-awesome#integration

    关于microservices - 我需要构建一个 Vert.x 虚拟主机服务器,将流量引导到其他 Vert.x 应用程序。这种应用间通信是如何实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53732817/

    相关文章:

    java - 微服务如何处理长调用链

    .net - 当 B 是回退时的一种 A/B 测试

    java - mainClassName的etter : String' is deprecated.在Java中已弃用

    java - Vertx3 - EventBus 在集群中不工作

    azure - 存储文件以从 Service Fabric 应用程序流式传输的最快方法是什么?

    azure - Windows Server 上开发环境的 Service Fabric

    java - 从哪里获得 vertx 仪表板监视器?

    postgresql - 如何使用 Vertx JDBC Client 使用列表作为 SQL 查询的参数源?

    java - 使用 vertx 进行 JWT 公钥/私钥身份验证中的握手

    java - 配置 Apache Cayenne 以与 Vertx 异步方式使用