Eureka單節點及高可用

轉載自:https://blog.csdn.net/qq_26323323/article/details/78652849

作者:恐龍弟旺仔

一:構建單節點Eureka服務註冊中心

1.創建Eureka server

    1)創建part-1-eureka項目,修改pom.xml文件
<parent>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-parent</artifactId>
        <version>Dalston.SR1</version>
        <relativePath />
    </parent>
    
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    依賴以上parent 、dependencies主要是想使用其版本的Eureka
    以下才是最主要的需要依賴的
<dependencies>
        <!-- spring-boot-starter-web web項目,集成容器tomcat -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- spring-boot-starter-actuator 管理工具/web 查看堆棧,動態刷新配置 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!-- cloud eureka組件 註冊中心 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
    </dependencies>
    注意:web項目主要是提供對外服務的,actuator主要是提供項目監控的。真正提供Eureka服務的是eureka-server

    2)在Application上添加@EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaApp {
    public static void main(String[] args) {
        new SpringApplicationBuilder(EurekaApp.class).web(true).run(args);
    }
}

    3)修改application.properties,設置應用名稱爲part-1-eureka
spring.application.name=part-1-eureka
    設置port爲1001
server.port=1001

    4)修改application.yml,設置Eureka信息
eureka:
  client:
    fetch-registry: false  # 是否拉取信息
    register-with-eureka: false  # 是否註冊到eurekaserver
    service-url:
      defaultZone: http://eureka1:1001/eureka/
  server:
    wait-time-in-ms-when-sync-empty: 0
    enable-self-preservation: true # false 關閉自我保護,不管如何都要剔除心跳檢測異常的服務
  instance:
    hostname: eureka1 

    注意:需要設置host文件中eureka1對應的IP地址;不需要將自己註冊到eurekaserver

    5)啓動EurekaApp,啓動成功後訪問http://eureka1:1001, 頁面訪問成功即啓動Eurekaserver成功 
    
2.創建Eureka client
    6)創建應用part-1-sms-interface
配置pom.xml,需添加eureka client依賴,可以選擇將eureka-server項目part-1-eureka 的maven依賴eureka-server換成以下依賴即可
<!-- cloud eureka組件 客戶端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>

配置application.yml文件
eureka:
  client:
    registerWithEureka: true
    fetchRegistry: true
    # eureka server地址
    serviceUrl:
      defaultZone: http://eureka1:1001/eureka/
  instance:
    # 心跳間隔
    leaseRenewalIntervalInSeconds: 30
    instance-id: ${spring.application.name}:${server.port}

    注意:defaultZone需要跟server保持一致
    
    7)在Application上添加@EnableEurekaClient
@SpringBootApplication
@EnableEurekaClient
public class SmsInterfaceApp {
    
    public static void main(String[] args) {
        new SpringApplicationBuilder(SmsInterfaceApp.class).web(true).run(args);
    }
}
    注意:此時爲client

    8)啓動SmsInterfaceApp,啓動成功後,查看http://eureka1:1001/ 即發現sms應用註冊到Eureka中

3.Java通過註冊中心調用sms服務


    9)創建一個新的項目,並註冊到Eurekaserver中,步驟同上
    10)在Controller中注入DiscoveryClient對象,並展示其instance,代碼如下
@RestController
@RequestMapping("/web")
public class TestController {
    
    @Autowired
    DiscoveryClient discoveryClient;  // spring cloud 提供的客戶端工具
    
    @RequestMapping(value="/test", method = RequestMethod.GET)
    public String test() throws IOException{
        // 調用服務器之前,通過eureka client 查詢服務的實例信息
        // 也就是說去看 部署了哪些機器,以及IP 端口等信息
        List<ServiceInstance> instances = discoveryClient.getInstances("part-1-sms-interface");
        ServiceInstance serviceInstance = instances.get(0);
        // 獲取的IP 端口  信息
        String host = serviceInstance.getHost();
        int port = serviceInstance.getPort();
        String result = new RestTemplate().getForObject("http://" + host + ":" + port +"/sms/test", String.class);
        return result;
    }
}

    注意:通過discoveryClient.getInstances方法,獲取服務名對應的host和port信息,然後通過restTemplate來遠程調用該應用
        * 需要先在sms應用中添加一個/sms/test對外服務
 

二:構建高可用Eureka server

    Eureka server的服務治理中,每個節點既是服務提供方,也是服務消費方,註冊中心也而不例外
    Eureka的高可用實際就是將自己作爲服務向其他註冊中心註冊自己,這樣就形成一組互相註冊的服務註冊中心,以實現服務清單的互相同步,達到高可用效果

    1)創建part-1-eureka-ha項目,基本過程同part-1-eureka的創建
    2)修改part-1-eureka的application.yml文件
eureka:
  client:
    # 是否註冊到eurekaserver
    registerWithEureka: true
    # 是否拉取信息
    fetchRegistry: false
    # eureka server地址
    serviceUrl:
      defaultZone: http://eureka2:1002/eureka/
  server:
    waitTimeInMsWhenSyncEmpty: 0
    # false 關閉自我保護,不管如何都要剔除心跳檢測異常的服務
    enableSelfPreservation: true
  instance:
    hostname: eureka1
  
    注意:不同點有兩處:registerWithEureka 修改爲true ;defaultZone修改爲eureka2 也就是part-1-eureka-ha所在的服務器地址
   
    3)修改part-1-eureka-ha的application.yml文件 
    同樣修改這兩處,defaultZone修改爲eureka1,也就是part-1-eureka所在的服務器地址

eureka:
  client:
    fetch-registry: false  # 是否拉取信息
    register-with-eureka: true  # 是否註冊到eurekaserver
    service-url:
      defaultZone: http://eureka1:1001/eureka/
  server:
    wait-time-in-ms-when-sync-empty: 0
    enable-self-preservation: true # false 關閉自我保護,不管如何都要剔除心跳檢測異常的服務
  instance:
    hostname: eureka2 

    4)修改兩個項目的Spring.application.name爲相同值,筆者定義爲part-1-eureka
        
    5)啓動兩個server項目
    在console可看到註冊成功信息
Registered instance PART-1-EUREKA/eureka1:part-1-eureka:1001 with status UP (replication=false)
DiscoveryClient_PART-1-EUREKA/eureka1:part-1-eureka:1002 - registration status: 204
Registered instance PART-1-EUREKA/eureka1:part-1-eureka:1002 with status UP (replication=true)
    
    訪問http://eureka:1001/ 


    即可發現status 存在兩個狀態爲UP的服務,在GeneralInfo中也可以看到available-replicas看到eureka2的服務

    6)註冊項目到HA註冊中心
    只需要修改sms項目的application.yml中 defaultZone爲 http://eureka1:1001/eureka/,http://eureka2:1002/eureka即可

--------------------- 
作者:恐龍弟旺仔 
來源:CSDN 
原文:https://blog.csdn.net/qq_26323323/article/details/78652849 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章