springcloud服務註冊與發現(二)

Spring Cloud Eureka是Spring Cloud Netflix項目下的服務治理模塊。而Spring Cloud Netflix項目是Spring Cloud的子項目之一,主要內容是對Netflix公司一系列開源產品的包裝,它爲Spring Boot應用提供了自配置的Netflix OSS整合。通過一些簡單的註解,開發者就可以快速的在應用中配置一下常用模塊並構建龐大的分佈式系統。它主要提供的模塊包括:服務發現(Eureka),斷路器(Hystrix),智能路由(Zuul),客戶端負載均衡(Ribbon)等。

服務註冊中心 :eureka-server

新建一個springboot項目:eureka-server,其pom.xml配置如下

<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.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>Dalston.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

想要實現一個服務註冊中心的功能非常簡單,只需要在項目的啓動類EurekaServerApplication上使用@EnableEurekaServer註解即可

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication{

    public static void main(String[] args) {
        new SpringApplicationBuilder(EurekaServerApplication.class)
                    .web(true).run(args);
    }
}

默認情況下,該服務註冊中心也會將自己作爲客戶端來嘗試註冊它自己,所以我們需要禁用它的客戶端註冊行爲,只需要在application.properties配置文件中增加如下信息:

spring.application.name=eureka-server
server.port=1001
eureka.instance.hostname=localhost
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
啓動EurekaServerApplication,訪問 http://localhost:9001/可以看到Eureka的頁面

服務提供方 :eureka-client

每一個實例註冊之後需要向註冊中心發送心跳,當client向server註冊時,它會提供一些元數據,例如主機和端口,URL,主頁等。Eureka server 從每個client實例接收心跳消息。 如果心跳超時,則通常將該實例從註冊server中刪除。

新建一個springboot項目:eureka-client,其pom.xml配置如下:

<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.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    <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>

想要實現一個服務提供方也很簡單,只要在項目的啓動類EurekaClientApplication上使用@EnableEurekaClient註解即可

@EnableEurekaClient
@SpringBootApplication
public class EurekaClientApplication {

     public static void main(String[] args) {
            new SpringApplicationBuilder(
                    EurekaClientApplication.class)
                .web(true).run(args);
        }
}

在application.properties中進行如下配置感興趣的可以朋友企鵝二零四二八四九二三七

spring.application.name=eureka-client
server.port=9002
eureka.client.serviceUrl.defaultZone=http://localhost:9001/eureka/
啓動EurekaClientApplication類

刷新 http://localhost:9001/,可以看到咱們的服務提供方已經註冊到了服務註冊中心

新建一個DiscoveryController 使用discoveryClient.getServices()獲取已經註冊的服務名,使用@value將配置文件中的信息賦值到ip

@RestController
public class DiscoveryController {

    @Autowired
    private DiscoveryClient discoveryClient;
    @Value("${server.port}")
    private String ip;

    @GetMapping("/client")
    public String client() {
        String services = "Services: " + discoveryClient.getServices()+" ip :"+ip;

        System.out.println(services);
        return services;
    }
}

訪問:http://localhost:9002/client

最後說明一下@EnableEurekaClient 與@EnableDiscoveryClient這兩個註解

 首先這個兩個註解都可以實現服務發現的功能,在spring cloud中discovery service有許多種實現(eureka、consul、 zookeeper等等)

 @EnableEurekaClient基於spring-cloud-netflix。服務採用eureka作爲註冊中心,使用場景較爲單一。

 @EnableDiscoveryClient基於spring-cloud-commons。服務採用其他註冊中心。

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