1. 程式人生 > >SpringCloud(一):註冊中心Eureka、feign(簡單微服務搭建)

SpringCloud(一):註冊中心Eureka、feign(簡單微服務搭建)

1.Eureka簡介

Eureka是Netflix開源的一款提供服務註冊和發現的產品,它提供了完整的Service Registry和Service Discovery實現。也是springcloud體系中最重要最核心的元件之一。

Eureka是一個服務註冊和發現模組,採用了 C-S 的設計架構。Eureka Server 作為服務註冊功能的伺服器,它是服務註冊中心。而系統中的其他微服務,使用 Eureka 的客戶端連線到 Eureka Server,並維持心跳連線。這樣系統的維護人員就可以通過 Eureka Server 來監控系統中各個微服務是否正常執行。Spring Cloud 的一些其他模組(比如Zuul)就可以通過 Eureka Server 來發現系統中的其他微服務,並執行相關的邏輯。

Eureka由三個角色組成:

1)Eureka Server

  • 提供服務註冊和發現

2)Service Provider

  • 服務提供方
  • 將自身服務註冊到Eureka,從而使服務消費方能夠找到

3)Service Consumer

  • 服務消費方
  • 從Eureka獲取註冊服務列表,從而能夠消費服務

2.建立註冊中心 Eureka Server

1)可以通過瀏覽器開啟SpringBoot專案初始化工具新建SpringBoot專案,也可以通過IDEA建立,本文通過網址建立

通過瀏覽器開啟https://start.spring.io/,選擇編開發語言、SpringBoot版本、專案名稱等資訊。

填好之後點選 Generate Project alt+,生成專案壓縮包,解壓縮之後通過eclipse匯入專案。

2)匯入專案之後在pom.xml中新增依賴Eureka,如果提示缺失版本號,再新增SpringCloud版本號,最終如下:

<?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.su</groupId>
    <artifactId>sbc-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>sbc-server</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
    
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        
        
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka-server</artifactId>
        </dependency>
    
    </dependencies>

    <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Camden.SR6</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>
 

3)配置application.properties

spring.application.name=register-server

server.port=9999
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/

4)啟動程式碼中新增@EnableEurekaServer註解

@EnableEurekaServer
@SpringBootApplication
public class SbcServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(SbcServerApplication.class, args);
        System.out.println("註冊中心啟動成功-------------------------");
    }
}

3.建立服務提供方

1)建立SpringBoot專案demo1,建立過程以及pom.xml檔案與註冊中心類似

2)配置application.properties,指明註冊中心地址埠號等

spring.application.name=demo1
server.port=8091
eureka.instance.hostname=localhost

eureka.client.serviceUrl.defaultZone=http://localhost:9999/eureka/

3)啟動程式碼中新增@EnableEurekaServer註解

@SpringBootApplication
@EnableEurekaServer
public class DemoNameApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoNameApplication.class, args);
        System.out.println("demo1啟動成功----------------------");
    }
}

4)提供服務

@RestController
public class HelloWordController {
    @RequestMapping(value="/hello",method=RequestMethod.GET)
    public String sayHello(@RequestParam String name){
        return "hello "+name+",welcome to demo1";
    }
}

4.建立服務消費方

1)建立SpringBoot專案demo2,建立過程以及pom.xml檔案與註冊中心類似,需要新增feign依賴

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
        </dependency>

2)配置application.properties,指明註冊中心地址埠號等

spring.application.name=demo2
server.port=8092
eureka.instance.hostname=localhost

eureka.client.serviceUrl.defaultZone=http://localhost:9999/eureka/

3)啟動類中新增@EnableEurekaServer @EnableFeignClients註解

@SpringBootApplication
@EnableEurekaServer
@EnableFeignClients
public class Demo2Application {

    public static void main(String[] args) {
        SpringApplication.run(Demo2Application.class, args);
        System.out.println("demo2啟動成功----------------------");
    }
}

4)提供消費入口

@RestController
public class ConsumerController {
    @Autowired
    HelloRemote HelloRemote;
    @RequestMapping("/hello/{name}")
    public String sayHello(@PathVariable("name") String name) {
        return HelloRemote.sayHello(name);
    }
}

5)提供消費介面,@FeignClient註解定義了該介面是一個Feign客戶端,name指定了註冊到Eureka上的服務名,demo1為上面服務提供方註冊的服務名。通過@ FeignClient(“服務名”),來指定呼叫哪個服務。比如在程式碼中呼叫了demo1服務的“/hello”介面,程式碼如下

@FeignClient(name= "demo1")
public interface HelloRemote {
    @RequestMapping(value="/hello",method=RequestMethod.GET)
    public String sayHello(@RequestParam(value="name") String name);
}

5.測試