SpringCloud教程之Spring Cloud Eureka


1.Spring Cloud Eureka

Spring Cloud Eureka 是 Spring Cloud Netflix 微服務套件中的一部分, 它基於 NetflixEureka 做了二次封裝, 主要負責完成微服務架構中的服務治理功能。

1.服務治理

服務治理可以說是微服務架構中最為核心和基礎的模塊, 它主要用來實現各個微服務實例的自動化注冊與發現。

服務注冊:在服務治理框架中, 通常都會構建一個注冊中心, 每個服務單元向注冊中心登記自己提供的服務,將主機與端口號、 版本號、 通信協議等一些附加信息告知注冊中心, 注冊中心按服務名分類組織服務清單。另外, 服務注冊中心還需要以心跳的方式去監測清單中的服務是否可用, 若不可用需要從服務清單中剔除, 達到排除故障服務的效果。

服務發現:由於在服務治理框架下運作, 服務間的調用不再通過指定具體的實例地址來實現, 而是通過向服務名發起請求調用實現。 所以, 服務調用方在調用服務提供方接口的時候, 並不知道具體的服務實例位置。 因此, 調用方需要向服務注冊中心咨詢服務, 並獲取所有服務的實例清單, 以實現對具體服務實例的訪問。

2.搭建Eureka

2.1 創建總體Maven項目;

首先創建一個總的Maven項目來管理SpringCloud項目,並添加依賴,pom.xml文件內容如下所示

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion><groupId>com.xcu</groupId>
    <artifactId>sc-f-chapter1</artifactId>
    <version>1.0-SNAPSHOT</version><parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/>
    </parent><modules>
        <module>eureka-server</module>
        <module>service-hi</module>
    </modules><properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
    </properties><dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies><dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement><build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

 

2.2 創建Eureka服務中心

2.2.1 右鍵創建總體Maven的Module

2.2.2 選擇Eureka Server組件

2.2.3 查看pom.xml,已經添加了依賴

2.2.4 在SpringBoot啟動類中添加注解@EnableEurekaServer

@EnableEurekaServer 注解啟動一個服務注冊中心提供給其他應用進行對話

2.2.5 配置application.yml

server:
  port: 8761
​
eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false 
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
​
spring:
  application:
    name: eurka-server

默認情況下,服務中心也會作為客戶端來自己注冊自己,所以配置eureka.client.registerWithEureka=false來關閉自我注冊;

eureka.client.fetchregistry: 由於注冊中心的職責就是維護服務實例,它並不需要去檢索服務, 所以也設置為 false

2.2.6 啟動查看

發現沒有服務,因為我們並沒有創建eureka-client

2.3 創建服務注冊中心

2.3.1-2.3.4 請參考2.2創建服務中心的步驟,這里略過

創建完畢的pom.xml如下

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.6.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xcu</groupId>
    <artifactId>service-hi</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>service-hi</name>
    <description>Demo project for Spring Boot</description><properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR3</spring-cloud.version>
    </properties><dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency><dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency><dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies><dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement><build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build></project>

2.3.5 在啟動類添加注解@EnableEurekaClient

@SpringBootApplication
@EnableEurekaClient
@RestController
public class ServiceHiApplication {
​
    public static void main(String[] args) {
        SpringApplication.run(ServiceHiApplication.class, args);
    }
​
    @Value("${server.port}")
    String port;
​
    @RequestMapping("/hi")
    public String home(@RequestParam(value = "name",defaultValue = "com.xcu")String name){
        return "hi "+name+ " ,i am form port:"+port;
    }
}
​

2.3.6 配置application.yml

server:
  port: 8762   #端口號
​
​
spring:
  application:
    name: service-hi  #服務名
​
​
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/  #服務注冊中心的地址

2.3.7 啟動項目並查看

完畢!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM