如何将Wildfly上的Jakarta EE WAR项目注册到Netflix Eureka Server?
将Jakarta EE 11 WAR项目注册到Netflix Eureka Server
完全可行,非Spring Boot的Jakarta EE项目可以通过Netflix原生Eureka Client实现服务注册,下面是具体的落地步骤:
一、添加依赖(Maven为例)
直接引入Netflix官方的Eureka Client核心依赖,无需依赖Spring Boot生态:
<dependencies> <!-- Netflix Eureka Client 核心依赖 --> <dependency> <groupId>com.netflix.eureka</groupId> <artifactId>eureka-client</artifactId> <version>2.0.0-rc.2</version> <!-- 选择适配的稳定版本 --> </dependency> <!-- 用于读取配置文件(可选,也可硬编码配置) --> <dependency> <groupId>io.github.cdimascio</groupId> <artifactId>java-dotenv</artifactId> <version>5.2.2</version> </dependency> </dependencies>
二、编写服务注册/下线逻辑
创建ServletContextListener,绑定Web应用的生命周期,在启动时完成Eureka注册,停止时主动下线:
import com.netflix.appinfo.ApplicationInfoManager; import com.netflix.appinfo.InstanceInfo; import com.netflix.appinfo.MyDataCenterInstanceConfig; import com.netflix.discovery.DefaultEurekaClientConfig; import com.netflix.discovery.DiscoveryClient; import jakarta.servlet.ServletContextEvent; import jakarta.servlet.ServletContextListener; import jakarta.servlet.annotation.WebListener; import io.github.cdimascio.dotenv.Dotenv; @WebListener public class EurekaRegistrationListener implements ServletContextListener { private DiscoveryClient discoveryClient; private ApplicationInfoManager applicationInfoManager; @Override public void contextInitialized(ServletContextEvent sce) { // 读取配置(可替换为读取properties/xml配置) Dotenv dotenv = Dotenv.load(); String eurekaServerUrl = dotenv.get("EUREKA_SERVER_URL", "http://localhost:8761/eureka/"); String serviceName = dotenv.get("SERVICE_NAME", "jakarta-ee-service"); int serverPort = Integer.parseInt(dotenv.get("SERVER_PORT", "8080")); // 配置实例基本信息 MyDataCenterInstanceConfig instanceConfig = new MyDataCenterInstanceConfig() { @Override public int getNonSecurePort() { return serverPort; } @Override public String getAppname() { return serviceName; } }; InstanceInfo instanceInfo = InstanceInfo.Builder.newBuilder() .setAppName(serviceName) .setPort(serverPort) .setHostName("localhost") .setStatus(InstanceInfo.InstanceStatus.UP) .build(); applicationInfoManager = new ApplicationInfoManager(instanceConfig, instanceInfo); DefaultEurekaClientConfig clientConfig = new DefaultEurekaClientConfig(); clientConfig.setEurekaServerServiceUrls("defaultZone", eurekaServerUrl); // 初始化客户端并完成注册 discoveryClient = new DiscoveryClient(applicationInfoManager, clientConfig); } @Override public void contextDestroyed(ServletContextEvent sce) { // 服务停止时主动通知Eureka下线 if (discoveryClient != null) { discoveryClient.shutdown(); } if (applicationInfoManager != null) { applicationInfoManager.setInstanceStatus(InstanceInfo.InstanceStatus.DOWN); } } }
三、配置项目专属参数
为两个Wildfly上的WAR项目分别配置独立参数,以.env文件为例:
8080端口项目的.env:
EUREKA_SERVER_URL=http://localhost:8761/eureka/ SERVICE_NAME=jakarta-ee-service-8080 SERVER_PORT=8080
8081端口项目的.env:
EUREKA_SERVER_URL=http://localhost:8761/eureka/ SERVICE_NAME=jakarta-ee-service-8081 SERVER_PORT=8081
四、Wildfly部署注意事项
- 确保两个WAR项目分别绑定Wildfly的8080、8081端口,避免端口冲突
- 将Eureka相关依赖打包进WAR的
WEB-INF/lib目录,确保Wildfly能正确加载依赖类
内容的提问来源于stack exchange,提问作者Sandeep Roy
相关产品推荐
相关产品推荐

