SpringCloud中集成Eureka实现集群部署服务注册与服务提供者

发布时间:2023-09-10 15:30

场景

SpringCloud分布式微服务项目搭建构造父子模块依赖与实现服务提供者与消费者示例:

SpringCloud分布式微服务项目搭建构造父子模块依赖与实现服务提供者与消费者示例_霸道流氓气质的博客-CSDN博客

SpringCloud分布式微服务项目Common通用依赖模块抽离:

SpringCloud分布式微服务项目Common通用依赖模块抽离_霸道流氓气质的博客-CSDN博客

在上面搭建项目结构基础上,首先是实现了单机模式下集成Eureka。

SpringCloud中集成Eureka实现服务注册(单机Eureka构建):

SpringCloud中集成Eureka实现服务注册(单机Eureka构建)_霸道流氓气质的博客-CSDN博客

Eureka集群原理

\"SpringCloud中集成Eureka实现集群部署服务注册与服务提供者_第1张图片\"

微服务RPC远程服务调用最核心的是高可用,如果注册中心只有一个,如果除了故障,会导致整个服务环境不可用。

Eureka集群的实现原理就是互相注册,相互守望。

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。

实现

1、参考上面搭建7001Eureka服务注册中心的过程,再新建一个子模块7002

\"SpringCloud中集成Eureka实现集群部署服务注册与服务提供者_第2张图片\"

与7001一样,pom文件中添加eureka-server的依赖

        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-server
        

新建主启动类EurekaMain7002并添加注解@EnableEurekaServer

package com.badao.springclouddemo;

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

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

2、修改hosts文件

注意与之前单机模式下不同,在配置文件中配置eureka服务端的实例名称时如果再一台电脑下避免出现重复问题,

所以修改C:\\Windows\\System32\\drivers\\etc下的hosts文件

\"SpringCloud中集成Eureka实现集群部署服务注册与服务提供者_第3张图片\"

添加如下

127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com

使本机ip能映射出两个域名。

3、修改配置文件application.yml

修改Eureka Server7001的application.yml,配置eureka服务端的实例名称为eureka7001.com

并且将其service-url下的defaultZone指向其它eureka,这里将其指向7002

server:
  port: 7001


eureka:
  instance:
    hostname: eureka7001.com #eureka服务端的实例名称
  client:
    register-with-eureka: false     #false表示不向注册中心注册自己。
    fetch-registry: false     #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
    #集群指向其它eureka
      defaultZone: http://eureka7002.com:7002/eureka/

上面讲的集群搭建就是相互注册,相互守望,如果是搭建了三个集群,则1指向2和3,2指向1和3这种类推。

然后新建并修改Eureka Server7002的application.yml,配置其eureka服务端的实例名称为eureka7002.com

然后将其指向7001

server:
  port: 7002


eureka:
  instance:
    hostname: eureka7002.com #eureka服务端的实例名称
  client:
    register-with-eureka: false     #false表示不向注册中心注册自己。
    fetch-registry: false     #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
    service-url:
      #集群指向其它eureka
      defaultZone: http://eureka7001.com:7001/eureka/
 
  

4、修改服务注册的服务提供者和服务消费者的注册方式

前面单机模式下,服务注册的方式是在application.yml中指向一个Eureka Server,现在集群模式下,需要将其

修改为注册到多个Eureka Server中

修改服务提供者8001的配置文件

eureka:
  client:
    #表示是否将自己注册进EurekaServer默认为true。
    register-with-eureka: true
    #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetchRegistry: true
    service-url:
      #单机版
      #defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka

同样修改服务消费者88的配置文件

eureka:
  client:
    #表示是否将自己注册进EurekaServer默认为true。
    register-with-eureka: true
    #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetchRegistry: true
    service-url:
      #单机
      #defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka

5、测试效果

分别启动Eureka Server7001和7002,然后启动服务提供者8001和服务消费者88服务

访问

http://eureka7001.com:7001/

\"SpringCloud中集成Eureka实现集群部署服务注册与服务提供者_第4张图片\"

可以看到和7002互为守望,服务注册者和消费者也已经注册成功。

再访问

http://eureka7002.com:7002/

\"SpringCloud中集成Eureka实现集群部署服务注册与服务提供者_第5张图片\"

可以看到和7001互为守望,服务注册者和消费者也已经注册成功。

6、服务提供者集群搭建

通过上面实现了Eureka Server 集群的搭建,那么如果服务提供者也是只有一个的话,一旦宕机,也达不到集群的目的。

所以对于服务提供者同样也需要进行集群的搭建。

上面已经建立的服务提供者8001服务,参考其新建过程,复制一个一模一样只有端口为8002的服务

\"SpringCloud中集成Eureka实现集群部署服务注册与服务提供者_第6张图片\"

修改其pom文件中的依赖与8001一致

    
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        
        
            com.badao
            cloud-api-commons
            ${project.version}
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
            org.mybatis.spring.boot
            mybatis-spring-boot-starter
        
        
            com.alibaba
            druid-spring-boot-starter
            1.1.10
        
        
        
            mysql
            mysql-connector-java
        
        
        
            org.springframework.boot
            spring-boot-starter-jdbc
        
        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

新建并修改其yml,从8001复制并修改其端口号

server:
  port: 8002

spring:
  application:
    name: cloud-payment-service

  datasource:
    type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型
    driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包
   url:jdbc:mysql://localhost:3306/springclouddemo?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: 123456

eureka:
  client:
    #表示是否将自己注册进EurekaServer默认为true。
    register-with-eureka: true
    #是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetchRegistry: true
    service-url:
      #单机版
      #defaultZone: http://localhost:7001/eureka
      defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka


mybatis:
  mapperLocations: classpath:mapper/*.xml
  type-aliases-package: com.badao.springclouddemo.entities    # 所有Entity别名类所在包

从8001复制主启动类并修改名称为8002

然后其他业务类均从8001复制到8002,使服务提供者具备8001和8002两个服务

\"SpringCloud中集成Eureka实现集群部署服务注册与服务提供者_第7张图片\"

为了后面能演示出消费者调用服务提供者时负载均衡的效果,在服务提供者的Controller中加入端口的输出

\"SpringCloud中集成Eureka实现集群部署服务注册与服务提供者_第8张图片\"

7、服务消费者修改负载均衡

之前在服务消费者88服务中调用服务提供者服务时,url是固定写死的,这种只适用于单机模式,显示服务提供者

已经搭建了集群,所以不能再写死服务提供者的地址了,而是要通过服务提供者的别名进行访问

\"SpringCloud中集成Eureka实现集群部署服务注册与服务提供者_第9张图片\"

这个别名可以在Eureka中获取

\"SpringCloud中集成Eureka实现集群部署服务注册与服务提供者_第10张图片\"

而服务的别名的设置是在服务提供者的配置文件中配置

\"SpringCloud中集成Eureka实现集群部署服务注册与服务提供者_第11张图片\"

消费者服务在调用服务时要支持负载均衡,需要在RestTemplate的配置中使用@LoadBalanced注解赋予负载均衡的能力。

package com.badao.springclouddemo.config;

import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class ApplicationContextConfig
{
    @Bean
    @LoadBalanced
    public RestTemplate getRestTemplate()
    {
        return new RestTemplate();
    }
}

\"SpringCloud中集成Eureka实现集群部署服务注册与服务提供者_第12张图片\"

8、测试集群搭建效果

启动7001和7002这两个Eureka Server,然后启动8001和8002这两个服务提供者,然后再启动88服务消费者

通过服务消费者访问服务提供者的服务,可以通过返回结果中的端口号看到负载均衡的效果

\"SpringCloud中集成Eureka实现集群部署服务注册与服务提供者_第13张图片\"

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号