Я хочу, чтобы мое приложение для загрузки Spring прослушивало второй порт (где «первый» - сервер.порт используется для конечных точек spring-webmvc) и направляет весь трафик входящий в «/» на втором порту к реализации Сервлета, который я написал. Этими запросами будут запросы json-rpc, которые я хочу отделить от обычного трафика службы. Как я могу это достичь?Весенняя загрузка: отправка запросов на другой порт на пользовательский сервлет
Я нашел код, чтобы иметь встроенный Tomcat прослушивает другой порт, добавив еще один разъем, как так:
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
tomcat.addAdditionalTomcatConnectors(createRpcServerConnector());
return tomcat;
}
private Connector createRpcServerConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
connector.setPort(Integer.parseInt(env.getProperty("rpc.port")));
return connector;
}
И я обнаружил, что вы можете зарегистрировать другой Servlet просто выставляя его как Bean, как так
@Bean
public Servlet rpcServlet() {
return new RpcServlet();
}
Однако при экспонировании сервлета, как это, он просто отображает его в шаблон URL на регулярной server.port. Я не могу понять, как подключить его к разъему RPC, чтобы «/» на моем веб-порту не пытался обрабатывать запросы RPC, а порт RPC не перенаправляет запросы на мои методы @RestController
.
Возможно, это происходит из-за моего непонимания Tomcat. Должен ли я использовать Tomcat для этого? Должен ли я переключиться на другой встроенный контейнер сервлетов, предоставленный весной-загрузкой?
Мне любопытно, почему вы используете эти два в одном приложении, а не как два отдельных приложения? – Tim
Это отличный вопрос, Тим. К сожалению, это не мое решение. Мне поручено реализовать его таким образом. Я считаю, что мотивация заключается в том, чтобы устанавливать разные типы трафика на разные порты по причинам, не зависящим от моего понимания. – BigFuzzyDoor
И в чем мотивация отсутствия двух отдельных приложений, каждый из которых прослушивает один порт? Как спросил @Tim, почему он должен быть в одном приложении? –