You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 17:20:12