SpringCloud实战【二】:服务治理-Eureka

1 服务治理

        微服务架构的特点就是会有非常多的微服务应用,应用之间需要有交互,在应用不多的情况下可以采用静态配置来配置自身需要访问的应用,但是应用多的情况下静态配置会变得非常难以维护,并且随着业务的发展,微服务的应用需要动态扩展,同时集群规模、服务位置、服务命名等都可能发生变化,如果还是通过手工来维护每个应用的配置,极容易发生错误和命名冲突等问题,同时维护这些信息所花费的人工成本也非常之高。为了解决这些问题服务治理就应运而生了,服务治理提供服务注册中心,把所有服务都注册在服务注册中心,也提供服务发现机制,让应用可以通过注册中心获取注册的服务。

2 搭建服务注册中心

2.1 pom文件配置

        创建项目springcloud-eureka1项目,spring cloud是基于spring boot的,所以创建项目的时候需要引入spring boot作为父引用,如下所示:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.13.RELEASE</version>
</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>

引入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>

完成的pom文件如下所示:

<?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.springcloud</groupId>
    <artifactId>springcloud-eureka1</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.13.RELEASE</version>
    </parent>

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

    <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>
</project>

2.2 创建启动类

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

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

2.3 创建配置文件

配置文件命名:application.yml。内容配置如下:

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

2.4 启动

启动类RegisterApplication1.java,在浏览器输入http://localhost:7001/eureka/,得到如下界面:

由于没有服务提供者,所以服务列表为空。至此,服务注册中心搭建成功。

3 服务发现与消费

3.1 创建服务提供者

创建项目springcloud-provider1和项目springcloud-provider2,两个项目的pom.xml文件都需要添加eureka客户端依赖:

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

两个项目分别创建启动类:

@SpringBootApplication
@EnableDiscoveryClient
public class ProviderApplication {

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

添加配置文件,两个项目的的端口不能一样,springcloud-provider1的application.yml配置如下

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

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

springcloud-provider2的application.yml配置如下

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

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

3.2 启动验证

运行两个项目的启动类,登录 http://localhost:7001,得到如下所示的服务:

可以看到有两个服务提供者。

4 搭建高可用注册中心

注册中心如果只有一个可能会造成单点的问题,可以创建多个注册中心。创建项目springcloud-eureka2,pom.xml文件配置如下所示:

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.13.RELEASE</version>
    </parent>

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

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

application.yml文件配置如下所示:

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

创建启动类RegisterApplication2.java

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

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

修改springcloud-eureka1的配置文件application.yml

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

启动注册中心springcloud-eureka1、springcloud-eureka2,启动服务提供者springcloud-provider1、springcloud-provider2,登录http://localhost:7001 得到如下所示的注册中心和服务提供者。

有图可以看出服务注册中心相互之间是注册的,每个服务注册中心上注册的服务是共用的。至此,一套高可用的微服务注册中心就搭建完成了。

本文源码下载地址:https://github.com/xiaoyususu/springcloud-eureka-demo.git

发布了32 篇原创文章 · 获赞 38 · 访问量 5473

猜你喜欢

转载自blog.csdn.net/u010482601/article/details/103440751