我在springboot项目中使用CommandLineRunner启动netty时,只能启动3个netty服务端,第四个就启动不了了
/**
* 启动程序
*
* @author rcms
*/
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class RcmsApplication implements CommandLineRunner {
@Resource
private NettyServer nettyServer;
@Autowired
private WindNettyServer windNettyServer;
@Autowired
private GkWindNettyServer gkWindNettyServer;
@Autowired
private TbWindNettyServer tbWindNettyServer;
public static void main(String[] args) {
// System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(RcmsApplication.class, args);
System.out.println("RCMS启动成功");
}
@Override
public void run(String... args) throws Exception {
// TODO Auto-generated method stub
CompletableFuture.runAsync(() -> nettyServer.init(Integer.parseInt(rcmsConfig.getTcpPort())));
CompletableFuture.runAsync(() -> windNettyServer.init(Integer.parseInt(rcmsConfig.getWindTcpPort())));
CompletableFuture.runAsync(() -> gkWindNettyServer.init(Integer.parseInt(rcmsConfig.getGkWindTcpPort())));
CompletableFuture.runAsync(() -> tbWindNettyServer.init(Integer.parseInt(rcmsConfig.getTbWindTcpPort())));//这个就无法启动了
}
}
已解决,使用CompletableFuture.runAsync配合线程池使用,希望对后来人有帮助
CompletableFuture.runAsync(() -> {nettyServer.init(Integer.parseInt(rcmsConfig.getTcpPort())); }, threadPoolConfig.threadPoolTaskExecutor());
检查日志了没,有没有错误提示之类的
可能是因为你的操作系统或者硬件资源限制了可用的端口数量,导致启动第四个Netty服务端时失败。具体原因可能需要查看你的操作系统和硬件配置情况。
你可以尝试在启动第四个Netty服务端时,使用一个不同的端口,看看能否成功启动。如果还是无法启动,可以尝试使用其他的方式来启动Netty,例如使用不同的线程或进程来分别启动Netty服务端,或者使用负载均衡来分配不同的Netty服务端。
另外,也建议在启动Netty服务端时,添加一些日志输出来帮助你定位问题。你可以在Netty服务端的init()方法中添加一些日志输出,例如输出正在使用的端口号和是否成功绑定端口等信息,以便于你找到问题所在。