Spring Cloud构建微服务之一 服务注册与发现

Spring Cloud是最近比较流行的微服务架构框架,本文介绍如何使用Spring Cloud搭建服务注册与发现模块。
这里会用到Spring Cloud Netflix,Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路有(Zuul),客户端负载均衡(Ribbon/Feign)等等。
创建服务注册中心
创建一个基础的Spring Boot工程,在pom.xml中引入需要的依赖内容(亦可以通过boot工程向导):

<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>Dalston.RELEASE</spring-cloud.version>
    </properties>

    <dependencies>
        <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>
            <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>

通过@EnableEurekaServer注解启动一个服务注册中心提供给其他应用。只需要在Spring Boot应用中添加这个注解就能开启此功能,比如:

package com.smart.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer
@SpringCloudApplication
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(EurekaServerApplication.class, args);
    }
}

应用配置application.properties:

server.port=1111
#eureka.instance.hostname=localhost

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/

在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,如果我们需要禁用它的客户端注册行为,只需要在application.properties中问增加如下配置:
eureka.client.register-with-eureka=false
这里将服务注册中心的端口通过server.port属性设置为1111

启动工程后,访问:http://localhost:1111/
可以看到下面的页面,还没有发现任何服务

图片.png

该工程可参见:eureka-server

推荐阅读更多精彩内容