当前位置: 首页 > 知识库问答 >
问题:

丢弃向导 - 多个端口上的资源

孙自怡
2023-03-14

我有一个基于滴闪(v 0.7.1)的泽西岛REST服务。目前,我使用一个应用程序连接器端口 (8810),并且我有两个资源(例如“/path1”、“/path2”)。

我将能够分别作为超文本传输协议:\\localhost:8810\path 1和超文本传输协议:\\localhost:8810\path 2访问这些资源。我试图实现的是为每个资源都有一个单独的端口。(例如超文本传输协议:\\localhost:8810\path 1和超文本传输协议:\\localhost:8820\path 2)。我调整了yaml文件,使其具有以下配置,当我启动应用程序时,两个资源都可以使用两个端口,不知道如何配置这些资源以使用特定端口,或者Dropwizard是否可能?

server:   
  applicationConnectors:
   - 
     type: http 
     port: 8810
   - 
     type: http 
     port: 8820

如果有人能开导你,请感激。

谢谢

共有1个答案

程俊誉
2023-03-14

您的问题是默认服务器工厂将所有应用程序连接器添加到同一个处理程序中,请参阅默认服务器工厂#build:

@Override
public Server build(Environment environment) {
    printBanner(environment.getName());
    final ThreadPool threadPool = createThreadPool(environment.metrics());
    final Server server = buildServer(environment.lifecycle(), threadPool);

    LOGGER.info("Registering jersey handler with root path prefix: {}", applicationContextPath);
    environment.getApplicationContext().setContextPath(applicationContextPath);
    final Handler applicationHandler = createAppServlet(server,
                                                        environment.jersey(),
                                                        environment.getObjectMapper(),
                                                        environment.getValidator(),
                                                        environment.getApplicationContext(),
                                                        environment.getJerseyServletContainer(),
                                                        environment.metrics());

    LOGGER.info("Registering admin handler with root path prefix: {}", adminContextPath);
    environment.getAdminContext().setContextPath(adminContextPath);
    final Handler adminHandler = createAdminServlet(server,
                                                    environment.getAdminContext(),
                                                    environment.metrics(),
                                                    environment.healthChecks());
    final RoutingHandler routingHandler = buildRoutingHandler(environment.metrics(),
                                                              server,
                                                              applicationHandler,
                                                              adminHandler);
    server.setHandler(addStatsHandler(addRequestLog(server, routingHandler, environment.getName())));
    return server;
}

您需要做的是实现您自己的ServerFactory。

可以扩展默认服务器工厂并覆盖生成方法,以按所需方式设置连接器。大概你会想要添加更多的配置来指示什么去哪里,因为就你的yaml而言,不可能将资源映射到特定的连接器。流浪汉怎么会知道这一点。

要覆盖dropwizard的行为(添加新的ServerFactory),您可以看到我写的关于添加日志记录的这篇文章:Dropwizard不会将自定义记录器记录到文件

它基本上涉及实现类并使其可被丢弃向导发现。之后,您需要做的就是将 yaml 文件更改为指向正确的服务器工厂。

如果您不喜欢这种方法,可以覆盖配置中的get/set方法以返回类。为此,您的类必须扩展DefaultServerFactory,否则yaml映射将不再工作。但是,您可以覆盖构建方法

更新:

更详细地看,您会遇到第二个问题:

您的环境只有一个它可以使用的jersey环境。您需要配置第二个jersey环境,因为目前默认情况下,每个Handler都将获得传递给它的相同jersey配置(唯一存在的配置)。这就是为什么它可用于您的所有超文本传输协议配置。总而言之:

    < li >创建支持多种球衣配置的新环境 < li >创建一个服务器工厂,它知道哪个jersey配置属于哪个处理程序,并以该形式实例化处理程序。

我认为这两个步骤是必要的。

在环境方面,您必须创建自己的ServerCommand(即启动dropwizard服务器的命令)。查看EnvironmentCommand#run,您可以看到创建环境的位置。这将是唯一可以覆盖默认环境的地方(据我所知),这是支持多个jersey配置所需要做的。

老实说,看着这个,我不相信这是机器人巫师的想法。

 类似资料:
  • 我无法使用 SSL 配置投递向导。 创建密钥/证书如下: 我已经将生成的keystore.jks与我的配置文件(yml)放在一起…我的配置文件具有超文本传输协议条目,如下所示: 已启动服务器..面临异常: 有人可以帮我吗?

  • 如果我把所有的变更集放在一个文件中,它就可以正常工作,但是如果我这样做: 然后我得到下面的错误。迁移目录位于 src/main/资源中 - 我出错的任何想法?谢谢。 编辑: 奇怪的是,这是可行的:

  • 除了前一节介绍的权重衰减以外,深度学习模型常常使用丢弃法(dropout)[1] 来应对过拟合问题。丢弃法有一些不同的变体。本节中提到的丢弃法特指倒置丢弃法(inverted dropout)。 方法 回忆一下,“多层感知机”一节的图3.3描述了一个单隐藏层的多层感知机。其中输入个数为4,隐藏单元个数为5,且隐藏单元$h_i$($i=1, \ldots, 5$)的计算表达式为 $$h_i = \p

  • 问题内容: 我正在使用Jsoup清理来自表单的用户输入。有问题的表单包含一个要求纯文本的表单。提交表单后,我使用; 清除输入。但是,由于html会忽略多余的空格,因此将从输入中删除有价值的空格字符。 例如,如果有人在中输入了一些文本行: 之后,您将拥有: 如何使保留空白?我知道它是为解析html而设计的,而不是html,因此还有更好的选择吗? 问题答案: 如果您的textarea只希望使用纯文本,

  • 我正在通过、和进行实时视频处理。 我已经在下面添加了核心代码。 驱动此操作的代码如下所示:

  • 我已经为网站设置了一个反向代理,现在我想代理我的游戏服务器以及与下面所述的端口,但我实在找不到任何地方如何执行这一点。有人有主意吗?如果可能的话,我想在Apache上这样做。我在Ubuntu上运行。 RDP TCP端口:3389 TCP端口:1143 团队语言 UDP端口:9987 TCP端口:9987 TCP端口:10011 TCP端口:30033 21