Java 在Vertx中创建新垂直市场的最佳实践

Java 在Vertx中创建新垂直市场的最佳实践,java,vert.x,Java,Vert.x,当我需要在Vertx中创建新的垂直线时,有人能给我提供最佳实践吗。我知道,每个垂直节点都可以远程部署并放入集群。然而,我仍然有一个问题,如何设计我的应用程序。那么我的问题是: 有很多垂直线可以吗 例如,我创建了一个HttpServer,其中有许多用于服务的端点。我想创建不同的子例程,并根据启用的功能(服务)设置它们。其中一些将启动长期流程,并将使用事件总线在系统中生成新事件。这里最好的方法是什么 例如,我可以将vertx作为参数传递到每个端点,并使用它创建路由器: getVertx().crea

当我需要在Vertx中创建新的垂直线时,有人能给我提供最佳实践吗。我知道,每个垂直节点都可以远程部署并放入集群。然而,我仍然有一个问题,如何设计我的应用程序。那么我的问题是:

  • 有很多垂直线可以吗
  • 例如,我创建了一个HttpServer,其中有许多用于服务的端点。我想创建不同的子例程,并根据启用的功能(服务)设置它们。其中一些将启动长期流程,并将使用事件总线在系统中生成新事件。这里最好的方法是什么 例如,我可以将vertx作为参数传递到每个端点,并使用它创建路由器:

    getVertx().createHttpServer()
    .requestHandler(路由器::接受)
    .listen(Config.GetEVotePort(),startedEvent->{..});
    ...
    mountSubRouter(“/api”),HttpEndpoint.createHttpRoutes(
    getVertx(),in.getType())

    或者,我可以将服务的每个新端点创建为垂直端点,而不是传递Vertx。我的问题主要是关于是否可以将vertx作为参数传递,或者当我需要这样做时,我应该实现新的垂直?

    我的10美分:

  • 是的,关键是可能有数千个垂直链接,因为据我所知,这个名称来自“particle”一词,整个想法是一种UNIX哲学,赌JVM。所以写下每一个粒子/垂直体来做一件事,并做好它。使用文本流在粒子之间进行通信,因为这是一个通用接口
  • 那么您的问题的答案是关于您有多少台服务器?每个服务器要启动多少个JVM?您希望每个JVM使用什么内存?在内存限制内,每个JVM可以运行多少个垂直链接?您的邮件大小有多大?网络带宽限制是多少?有多少条消息正在通过您的系统?事件总线能处理这些流量吗

  • 然后是关于垂直体如何协同工作的,基本上就是事件总线。我认为您想要的是您的HttpServer将消息路由到一个事件总线,在该总线中,不同的verticle被配置为侦听不同的“主题”(不同的文本流)。如果1个垂直点启动了一个长期过程,它是由总线上的事件触发的,那么它会将输出返回到下一个垂直点/响应垂直点的主题上
  • 同样,这取决于您有多少服务器/JVM,以及您是否有集群事件总线


    因此,1个垂直链接应该服务于多个端点,例如使用路由器,是的,将来自HttpServer的给定请求匹配到路由,然后路由选择一个处理程序,并且该处理程序位于给定的垂直链接中。

    最好有很多垂直链接。这样,您的应用程序是松散耦合的,可以轻松实现负载平衡。例如,如果负载较高,您可能需要1-3个布线竖梃,但需要更多的工作竖梃。这样,您可以只增加工人数量,而不改变垂直布线的数量

    我不建议将vertx作为参数传递。请改用EventBus,正如@rupweb已经建议的那样。在您的垂直布线之间将消息传递给工人和工人。这是您正在寻找的最佳实践: