Spring+Eureka

1. 配置監聽

<listener>
    <listener-class>com.fold.listener.EurekaListener</listener-class>
</listener>

2.添加監聽類

package com.fold.listener;

import com.netflix.appinfo.ApplicationInfoManager;
import com.netflix.appinfo.InstanceInfo;
import com.netflix.config.ConfigurationManager;
import com.netflix.config.DynamicPropertyFactory;
import com.netflix.discovery.DefaultEurekaClientConfig;
import com.netflix.discovery.DiscoveryManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.io.IOException;

public class EurekaListener implements ServletContextListener {

    private static final Logger logger = LoggerFactory.getLogger(EurekaListener.class);

    private static final DynamicPropertyFactory CONFIG_INSTANCE = DynamicPropertyFactory.getInstance();

    private static final String CONFIG_FILE_NAME = "config.properties";

    @Override
    public void contextInitialized(ServletContextEvent sce) {
        registerWithEureka();
    }


    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        DiscoveryManager.getInstance().shutdownComponent();
    }


    private void registerWithEureka() {
        try {
            ConfigurationManager.loadPropertiesFromResources(CONFIG_FILE_NAME);
        } catch (IOException e) {
            logger.error("config初始化失敗");
            throw new IllegalStateException("config初始化失敗");
        }
        DiscoveryManager.getInstance().initComponent(new MyInstanceConfig(), new DefaultEurekaClientConfig());
        ApplicationInfoManager.getInstance().setInstanceStatus(InstanceInfo.InstanceStatus.UP);

        String vipAddress = ConfigurationManager.getConfigInstance().getString("eureka.vipAddress");
        InstanceInfo nextServerInfo = null;
        while (nextServerInfo == null) {
            try {
                nextServerInfo = DiscoveryManager.getInstance().getDiscoveryClient().getNextServerFromEureka(vipAddress, false);
                if (nextServerInfo != null) {
                    logger.info("register eureka server suceess!");
                }
            } catch (Exception e) {
                logger.info("Waiting for service to register with eureka...(10s)");
                try {
                    Thread.sleep(10000);
                } catch (InterruptedException e1) {
                    logger.error(e1.getMessage());
                }
            }
        }
    }
}

3.自定義配置參數

package com.fold.listener;

import com.netflix.appinfo.MyDataCenterInstanceConfig;
import com.netflix.config.ConfigurationManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.InetAddress;

public class MyInstanceConfig extends MyDataCenterInstanceConfig {
    private static final Logger logger = LoggerFactory.getLogger(MyInstanceConfig.class);
    private static String ipAddress = null;
    private static String serviceName = null;
    private static String servicePort = null;
    //心跳
    private static int renewalInterval = 30;
    //發呆
    private static int expirateionDuration = 90;


    static {
        try {
            ipAddress = InetAddress.getLocalHost().getHostAddress();
            serviceName = ConfigurationManager.getConfigInstance().getString("eureka.name");
            servicePort = ConfigurationManager.getConfigInstance().getString("eureka.port");
            renewalInterval = ConfigurationManager.getConfigInstance().getInt("eureke.lease-renewal-interval-in-seconds");
            expirateionDuration = ConfigurationManager.getConfigInstance().getInt("eureke.lease-expiration-duration-in-seconds");
        } catch (Exception e) {
            logger.error(e.getMessage());
        }
    }

    @Override
    public String getHostName(boolean refresh) {
        try {
            return ipAddress;
        } catch (Exception e) {
            return super.getHostName(refresh);
        }
    }

    @Override
    public String getHealthCheckUrl() {
        return "http://" + ipAddress + ":" + servicePort + "/health";
    }

    @Override
    public String getHomePageUrl() {
        return "http://" + ipAddress + ":" + servicePort;
    }

    @Override
    public String getStatusPageUrl() {
        return "http://" + ipAddress + ":" + servicePort + "/info";
    }

    @Override
    public int getLeaseRenewalIntervalInSeconds() {
        return renewalInterval;
    }

    @Override
    public int getLeaseExpirationDurationInSeconds() {
        return expirateionDuration;
    }


}

4.配置文件

# Eureka configuration
eureka.region=default
eureka.vipAddress=APP
eureka.name=APP
eureka.port=8099
eureka.preferSameZone=true
eureka.shouldUseDns=false
eureka.us-east-1.availabilityZones=default
eureke.lease-renewal-interval-in-seconds=5
eureke.lease-expiration-duration-in-seconds=10
eureka.serviceUrl.default=http://ip:port/eureka/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章