使用 Reactor Netty 配置 Spring Boot 以监听 2 个端口

Posted

技术标签:

【中文标题】使用 Reactor Netty 配置 Spring Boot 以监听 2 个端口【英文标题】:Configure Spring Boot with Reactor Netty to Listen on 2 Ports 【发布时间】:2019-04-04 06:36:51 【问题描述】:

如何使用 Reactor Netty 配置 Spring Boot 以侦听两个单独的端口(除了 Actuator 端口)并将单独的 @RestController 绑定到每个端口?

下面是用例:我有一个有四个 RESTful API 调用的有界上下文。两个会外露,两个不能。每一对都将以自己的方式得到保护,但我们需要一个额外的层保护,这样内部调用就不能在外部路由。像 Kubernetes 这样的平台通过仅将流量路由到我们专门公开的端口来支持这一点。

所以我希望 Reactor Netty 监听以下端口并仅将适当的请求路由到每个端口:

    8080 请求仅由 ExternalRestController 类响应(默认配置或很容易被 server.port=8080 覆盖)。 8081 请求仅由 InternalRestController 类响应。 8082 请求由 SpringBoot 的 Actuator 支持响应(使用 management.server.port=8082 轻松配置)

如果使用 @RestController 注释的 Spring Boot 注释模型无法做到这一点,我会考虑使用新的 RouterFunction 支持。

【问题讨论】:

可能不是您想要的,但您绝对可以使用 maven 多模块项目来做到这一点。您甚至可以让一个模块将另一个模块添加为依赖项并仅运行该模块以查看两台服务器的运行情况。 【参考方案1】:

Spring Boot 中不支持将单个控制器映射到 Spring MVC、WebFlux 或 WebFlux.Fn 中的单个端口。这是可能的,如执行器的单独管理端口所示,但需要相当多的工作。

为了在单独的端口上运行,Actuator 使用子应用程序上下文和单独的嵌入式 Web 服务器,该服务器配置为侦听单独的端口。您可以使用 Spring Boot 的源代码作为灵感,在自己的应用程序中模仿这种安排。 ManagementContextAutoConfiguration 是一个很好的起点。

【讨论】:

以上是关于使用 Reactor Netty 配置 Spring Boot 以监听 2 个端口的主要内容,如果未能解决你的问题,请参考以下文章

使用 Reactor Netty 配置 Spring Boot 以监听 2 个端口

[翻译]Reactor Netty参考指南 - 3.TCP服务端

Spring Boot Reactor Netty配置

Spring Boot Reactor Netty配置

Spring Boot Reactor Netty配置

详细图解Netty Reactor启动全流程 | 万字长文 | 多图预警