04、SpringCloud 实战教程 - Eureka集群版搭建

上一篇我们只是简单的搭建了Eureka的单机版,但是在真正的生产环境上,是远远不够的,微服务RPC远程服务调用最核心的就是高可用,如果一台Eureka宕机了,那我们整个服务就不能使用了,所以就需要我们的集群版,实现负载均衡与故障容错。

我们参考cloud-eureka-server,新建module我们命名为cloud-eureka-server02,这样可以防止与cloud-eureka-server区别开来。具体的如何新建module这里就不贴截图了,具体的新建步骤看前两篇文章都有。

这里从修改pom文件开始贴代码。注意:主要就是添加eureka-server依赖。

<?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">
    <parent>
        <artifactId>mcroservice</artifactId>
        <groupId>com.study.springcloud</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <artifactId>cloud-eureka-server02</artifactId>
    <dependencies>
        <!--eureka-server-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
        <!-- 引入自己定义的api通用包,可以使用Payment支付Entity -->
        <dependency>
            <groupId>com.study.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!--boot web actuator-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <!--一般通用配置-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>
    </dependencies>
</project>

这里需要注意的是,Eureka集群是需要修改映射配置的,我们找到C:\Windows\System32\drivers\etc路径下的hosts文件,在文件的最后加上我们两个Eureka的映射,如下图:

 

配置yml文件,Eureka集群,是需要指向其他的Eureka,比如我现在的7001指向7002,7002指向7001。如果多个就要闭环的指向,比如1指向2,2指向3,3指向1。这简称为互相注册,相互守望。

Eureka端口为7002的的yml文件,如下图:

server:
  port: 7002
eureka:
  instance:
    hostname: eureka7002.comeureka服务端的实例名称

  client:
    register-with-eureka: false    false表示不向注册中心注册自己。
    fetch-registry: false    false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
     设置与eureka  server交互的地址和注册服务都需要依赖这个地址
      defaultZone: http://eureka7001.com:7001/eureka/ 集群就是指向其他的eureka
     

Eureka端口为7001的的yml文件,如下图:

server:
  port: 7001
eureka:
  instance:
    hostname: eureka7001.comeureka服务端的实例名称
  client:
    register-with-eureka: false    false表示不向注册中心注册自己。
    fetch-registry: false    false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
     设置与eureka  server交互的地址和注册服务都需要依赖这个地址
      defaultZone: http://eureka7002.com:7002/eureka/  集群就是指向其他的eureka

主启动类:因为是Eureka的服务端,所以要加该注解@EnableEurekaServer

package com.buba.springcloud.eureka;

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

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

我们现在修改生产者的服务,也就是cloud-provide-payment这个服务,修改yml文件,将该服务分别注入这个Eureka中:换成

defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka

server:
  port: 8001服务端口
#spring相关配置
spring:
  application:
    name: mcroservice-payment 服务名
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource 当前数据源操作类型
    driver-class-name: org.gjt.mm.mysql.Driver 数据库驱动包
    url: jdbc:mysql://localhost:3306/db01?autoReconnect=true&useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false
    username: root
    password: root
#mybatis:配置
mybatis:
  mapperLocations: classpath:dao/*.xml
  type-aliases-package: com.buba.springcloud.pojo    所有pojo别名类所在包

#eureka配置
eureka:
  client:
   表示是否将自己注册进eureka  默认为true
    register-with-eureka: true
   是否从EurekaServer中抓取已有的注册信息,默认为true,单点无所谓,集群必须设置true才能和ribbon使用负载均衡
    fetch-registry: true
    service-url:
     集群配置
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka
  instance:
   服务名称修改
    instance-id: payment8001
   访问路径可以显示ip地址
    prefer-ip-address: true

现在我们要先启动Eureka端口为7001的服务,然后再启动Eureka端口为7002的服务,再启动我们的生产者的服务,最后启动消费者的服务。

先看一下Eureka端口为7001的服务,看到生产者和消费者都已经成功注册到了Eureka服务中心。如下图:

 

再看看一下Eureka端口为7002的服务,看到生产者和消费者都已经成功注册到了Eureka服务中心。如下图:

 

下面测试一下消费者服务,是否可以成功访问。输入http://localhost/consumer/payment/get/1,访问成功,如下图:

 

集群版的Eureka就搭建完成啦,看起来难,做起来就很容易,你不会之前觉得难,学会之后就觉得很简单。

下一篇文章搭建生产者集群服务实现负载均衡,持续关注、点赞。我们持续更新中。