孰能巧用 Spring Cloud 服務註冊中心Eureka

Eureka介紹

在Spring Cloud Netflix 整合技術棧中,Eureka既能夠做爲服務註冊中心也能夠用於服務發現對整個微服務架構起着最核心的整合做用。
Eureka是基於REST(Representational State Transfer)服務,主要以AWS雲服務爲支撐,提供服務發現並實現負載均衡和故障轉移。在Netflix,爲Eureka提供更爲複雜的負載均衡方案進行封裝,以實現高可用,它包括基於流量、資源利用率以及請求返回狀態的加權負載均衡。
現有的Eureka 2.0開源工做已經中止。做爲2.x分支上現有工做存儲庫的一部分發布的代碼庫和工件被認爲是自擔風險使用的。
雖然Eureka開源工做已經中止,可是它之前提供的版本的功能足以對須要項目的業務場景適用。
除了Eureka,還可使用 Feature,Consul,zookeeper等來做爲服務註冊中心。java

父工程建立

如今建立一個cloud-spring 的pom工程做爲本次Spring Cloud全部章篇的一個父工程。
父工程pom.xml配置
此次咱們使用Spring Cloud Finchley.RELEASE版,這個版本相對是比較穩定的。git

<!-- 定義依賴版本進行依賴管理 -->
    <properties>
        <spring-cloud-version>Finchley.RELEASE</spring-cloud-version>
        <spring-boot-version>2.0.4.RELEASE</spring-boot-version>
    </properties>
    
    <dependencyManagement>
        <dependencies>
            <!-- SpringCloud -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud-version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <!-- SpringBoot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot-version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <!-- 插件 -->
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <goals>
                                <goal>build-info</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <configuration>
                        <target>${java.version}</target>
                        <source>${java.version}</source>
                        <encoding>${project.reporting.outputEncoding}</encoding>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

使用Spring Cloud Finchley.RELEASE版注意事項:Spring Boot 版本請勿低於2.0.3不然致使不少依賴啓動報錯github

搭建Eureka服務註冊中心

在父工程下建立子模塊,工程名:cloud-netfix-eureka-server
在pom.xml中添加依賴:spring

<dependencies>
        <!-- Eureka服務端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
 </dependencies>

建立啓動類 CommenEurekaServerApplication.java架構

/**
 * Eureka註冊中心服務
 * @author SimpleWu
 */
@SpringBootApplication
@EnableEurekaServer
public class CommenEurekaServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(CommenEurekaServerApplication.class,args);
    }
}

經過@EnableEurekaServer註解啓動一個服務註冊中心提供給其餘應用進行對話
而後在稍微寫下配置便可搭建好一個服務註冊中心,下面編寫application.properties(yml):app

server.port=10001
spring.application.name=cloud-netflix-eureka-server

eureka.instance.hostname=localhost
# 因爲該應用爲註冊中心,因此設置爲false,表明不向註冊中心註冊本身
eureka.client.register-with-eureka=false
# 因爲註冊中心的職責就是維護服務實例,他並不須要去檢索服務,因此也設置爲false
eureka.client.fetch-registry=false
# 關閉自我保護
eureka.server.enableSelfPreservation=false
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
#清理無效節點的頻率 30秒
eureka.server.eviction-interval-timer-in-ms=30000
#表示 Eureka Server 開啓自我保護的係數,默認:0.85。
eureka.server.renewal-percent-threshold=0.85

在默認配置下Eureka服務端會主動註冊本身,在這裏咱們只做爲服務註冊中心因此不須要註冊到服務中心,在之後的集羣模式須要將Eureka服務高可用集羣時須要註冊到其餘的註冊中心。
而且Eureka提供服務事件監聽,以下:負載均衡

/**
 * Eureka事件監聽
 * @author SimpleWu
 */
@Component
public class EurekaListener {

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

    @EventListener
    public void listen(EurekaInstanceCanceledEvent event) {
        log.debug(event.getServerId() + "\t" + event.getAppName() + " 服務下線");
    }
    @EventListener
    public void listen(EurekaInstanceRegisteredEvent event) {
        InstanceInfo instanceInfo = event.getInstanceInfo();
        log.debug(instanceInfo.getAppName() + "進行註冊");
    }
    @EventListener
    public void listen(EurekaInstanceRenewedEvent event) {
        log.debug(event.getServerId() + "\t" + event.getAppName() + " 服務進行續約");
    }
    @EventListener
    public void listen(EurekaRegistryAvailableEvent event) {
        log.debug("註冊中心 啓動");
    }
    @EventListener
    public void listen(EurekaServerStartedEvent event) {
        log.debug("Eureka Server 啓動");
    }
}

而後咱們經過啓動類CommenEurekaServerApplication.java 容許main函數進行啓動。
訪問: http://localhost:10001/ 便可看到Eureka服務治理中心,其中Instances currently registered with Eureka 尚未註冊任何實例。
該案例代碼可參考:https://github.com/450255266/open-doubi/tree/master/SpringCloudmaven

相關文章
相關標籤/搜索