Spring Cloud实例教程一 Spring Cloud Eureka 服务注册中心


熟悉微服务架构或Dubbo框架的都知道,微服务中最核心、最基础的组件就是注册中心了。本文我们就利用Spring Cloud Eureka实现服务注册中心。并注册一个简单的服务提供者。

开始本系列教程之前,先建一个父项目spring-cloud-sample-tutorial,并添加公用依赖。

<dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Dalston.SR3</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-dependencies</artifactId>
        <version>1.5.6.RELEASE</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

使用Spring Cloud Eureka构建服务注册中心

新建spring-cloud-sample-tutorial-register项目

新建spring-cloud-sample-tutorial-register子项目,实现注册中心服务

引入spring-cloud-starter-eureka-server依赖

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

启动类添加@EnableEurekaServer,启用注册中心服务

@EnableEurekaServer
@SpringBootApplication
public class RegisterApplication {
    public static void main(String[] args) {
        SpringApplication.run(RegisterApplication.class,args);
    }
}

配置application.properties

server.port=10001

eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.service-url.defaultZone=http://localhost:10001/eureka
  • server.port:应用启动端口
  • eureka.client.register-with-eureka=false:自身不注册
  • eureka.client.fetch-registry=false:自身不检索服务
  • eureka.client.service-url.defaultZone:注册中心地址

启动RegisterApplication

看到以下内容,就说明启动成功了:

2017-10-10 19:13:13.934 INFO 5745 --- [ Thread-11] e.s.EurekaServerInitializerConfiguration : Started Eureka Server

2017-10-10 19:13:14.030 INFO 5745 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 10001 (http)

从浏览器访问http://localhost:10001/,可以看到如下界面,因为还没有注册服务,所以应用列表是空的。

到这里,注册中心就搭建好了。接下来我们就创建一个服务提供者,注册到注册中心。

注册服务

新建spring-cloud-sample-tutorial-provider项目

新建spring-cloud-sample-tutorial-provider项目,用作服务提供者。

添加eureka客户端依赖

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

配置application.properties

spring.application.name=producer
server.port=20001
eureka.client.service-url.defaultZone=http://localhost:10001/eureka/

创建ProducerApplication

@SpringBootApplication
@EnableEurekaClient
public class ProducerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProducerApplication.class, args);
    }
}

注意这里需要添加@EnableEurekaClient注解,用于启用注册中心客户端。

创建UserController

@Controller
@RequestMapping("user")
public class UserController {
    @RequestMapping("add")
    @ResponseBody
    public String addUser(String userName, String age) {
        return "Success";
    }
}

启动ProducerApplication,在看注册中心页面,这时就出现了Producer应用,说明服务已经注册成功:

到这里,注册中心以及服务提供方已经完成。

构建高可用的注册中心

在实际的项目中,单机往往是不够的,而需要注册中心集群,实现注册中心的高可用。

为了模拟注册中心的集群形式,我这里分别创建application-profile1.properties和application-profile2.properties,用于模拟两台服务的启动,配置如下:

application-profile1.properties:

spring.application.name=service-register
server.port=10001

eureka.instance.hostname=peer1
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://peer1:10001/eureka/,http://peer2:10002/eureka/

application-profile2.properties

spring.application.name=service-register
server.port=10002

eureka.instance.hostname=peer2
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://peer1:10001/eureka/,http://peer2:10002/eureka/

分别用这两个配置文件启动:

在看eureka页面:

从页面上可以看出,两个服务已经互为备份了(生产中数量根据实际需求定),这样就完成了注册中心的高可用了。

注意:因为这里是演示,需要配置peer1和peer2的hosts。实际生产者不需要配置,但建议配置成域名,方便维护。

127.0.0.1 peer1
127.0.0.1 peer2

修改服务提供者的注册中心服务地址,完成高可用的注册:

eureka.client.service-url.defaultZone=http://localhost:10001/eureka/,http://localhost:10002/eureka/

启动producer应用,在看页面就看到producer服务注册到了两个注册中心上了。

总结

本文完成了:

  • 注册中心服务、高可用的注册中心服务
  • 服务提供者的服务注册

注意:

  • 在实际生产中,一定要做成集群,实现服务的高可用。
  • 建议注册中心配置成域名,便于以后的维护。

源码下载

原创文章,转载请注明出处:转载自小马过河 - Spring Cloud实例教程一 Spring Cloud Eureka 服务注册中心


马军伟
关于作者 马军伟
写的不错,支持一下

先给自己定个小目标,日更一新。