SpringCloud实战-Eureka

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

首先先创建一个spirngboot工程,并添加公用依赖。

如下:

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Camden.SR7</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
</dependencyManagement>

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

如下:

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka-server</artifactId>
        <version>1.3.5.RELEASE</version>
</dependency>

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

如下:

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

配置application.yml

如下:

#端口号
server:
port: 8888
#Eureka实例名,集群中根据这里相互识别
eureka:
instance:
hostname: eureka
#客户端
client:
#是否开启注册服务,因为这里如果为true表示自己注册自己,而自己就是一个服务注册方,没必要自己注册自己
register-with-eureka: false
#是否拉取服务列表,这里我只提供服务给别的服务。
fetch-registry: false
#注册中心地址
service-url:
defaultZone: http://localhost:8888/eureka/

然后启动springboot工程,从浏览器访问http://localhost:8888/,可以看到如下界面,因为还没有注册服务,所以应用列表是空的

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

注册服务

新建provider1,provider2两个子模块,用作服务提供者。

如下图:

添加eureka客户端依赖

两个服务提供者的pom.xml都是一样的,如下:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Camden.SR7</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <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.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.3.5.RELEASE</version>
        </dependency>

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

 修改两个application.yml文件,图下图:

#端口号
server:
  port: 8080
#Eureka实例名,集群中根据这里相互识别
spring:
  application:
    name: hello-service

eureka:
#客户端
  client:
#注册中心地址
    service-url:
      defaultZone: http://localhost:8888/eureka/

 第二provider如下:

#端口号
server:
  port: 8081
#Eureka实例名,集群中根据这里相互识别
spring:
  application:
    name: hello-service

eureka:
#客户端
  client:
#注册中心地址
    service-url:
      defaultZone: http://localhost:8888/eureka/

两个分别在启动类上加如下@EnableDiscoveryClient注解,如下所示:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class Provider1Application {

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

然后分别启动这两个服务,如下图所示:

看到有两个HELLO-SERVICE证明两个服务已经注册成功了。

构建高可用的注册中心

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

这里给读者解释一下什么是注册,什么是续约,什么是下线,什么是Relicate

  1.注册,表示服务提供者需要向注册中心注册服务

  2.续约,这里类似于心跳检测机制,默认是每隔90秒,服务提供者需要向注册中心进行续约,目的是隔一段时间Service Provider调用接口,告诉Eureka Server它还活着没挂,不要把它T了。通俗的说就是它们两之间的心跳检测,避免服务提供者被剔除掉

  3.下线,表示服务提供者断开

为了模拟注册中心的集群形式,我这里再创建一个springcloud-Eureka1注册中心模块,用于模拟两台服务的启动,如下:

修改第一个Eureka配置如下:

#端口号
server:
  port: 8888
#Eureka实例名,集群中根据这里相互识别
eureka:
  instance:
    hostname: eureka
#客户端
  client:
    service-url:
      defaultZone: http://localhost:8889/eureka/
  server:
#是否开启安全保护,默认是开启的,如果默认开启,注册中心的服务列表就算有些服务断开了,也会继续保存
    enable-self-preservation: false
spring:
  application:
    name: eureka-service

再修改第二个Eureka配置,如下:

#端口号
server:
  port: 8889
#Eureka实例名,集群中根据这里相互识别
eureka:
  instance:
    hostname: eureka1
##续约时间
#    lease-expiration-duration-in-seconds: 90
##定时任务是时间,每个隔多少秒去重新刷新续约时间
#    lease-renewal-interval-in-seconds: 30
#客户端
  client:

    service-url:
      defaultZone: http://localhost:8888/eureka/
##每个隔多少秒刷新获取服务列表世界
#    registry-fetch-interval-seconds: 30
#服务端:
  server:
    enable-self-preservation: false
spring:
  application:
    name: eureka-service

其他基本不变,原理其实很简单,就是两个Eureka相互注册,你向我注册,我向你注册。

然后分别启动这两个Eureka

如下:

看一看到,服务列表有两个同名的EUREKA-SERVICE,证明高可用注册中心搭建起来了。

猜你喜欢

转载自www.cnblogs.com/huangjuncong/p/9020474.html