Spring Cloud全集文章目录:

零、什么是微服务?一看就会系列!

一、手把手教你搭建SpringCloud项目(一)图文详解,傻瓜式操作

二、手把手教你搭建SpringCloud项目(二)生产者与消费者

三、手把手教你搭建SpringCloud项目(三)集成Eureka服务注册中心

四、手把手教你搭建SpringCloud项目(四)Eureka集群版搭建

五、手把手教你搭建SpringCloud项目(五)生产者集群版搭建

六、手把手教你搭建SpringCloud项目(六)Eureka实现服务发现

七、手把手教你搭建SpringCloud项目(七)集成Consul服务注册中心

八、手把手教你搭建SpringCloud项目(八)集成Ribbon负载均衡器

九、手把手教你搭建SpringCloud项目(九)集成OpenFeign服务接口调用

十、手把手教你搭建SpringCloud项目(十)集成Hystrix之服务降级

十一、手把手教你搭建SpringCloud项目(十一)集成Hystrix之服务熔断

十二、手把手教你搭建SpringCloud项目(十二 )集成Hystrix之图形化Dashboard实时监控

十三、手把手教你搭建SpringCloud项目(十三 )集成Gateway新一代网关

十四、手把手教你搭建SpringCloud项目(十四 )集成Config分布式配置中心

十五、手把手教你搭建SpringCloud项目(十五)集成Bus消息总线

十六、手把手教你搭建SpringCloud项目(十六)集成Stream消息驱动

十七、手把手教你搭建SpringCloud项目(十七)集成Sleuth分布式链路跟踪

文章继续更新中,欢迎点赞关注!

     

上一篇我们只是简单的搭建了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.com #eureka服务端的实例名称

  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.com #eureka服务端的实例名称
  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就搭建完成啦,看起来难,做起来就很容易,你不会之前觉得难,学会之后就觉得很简单。

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

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐