SpringCloud之Eureka(二)

本文介绍如何在SpringCloud中实现Eureka服务注册中心的高可用性。通过设置多个Eureka节点并互相注册,确保服务清单的同步,即使单个节点故障也能保持服务的正常运行。同时,讲解了服务提供者和消费者在高可用环境下的配置,包括服务提供者配置多个注册中心地址,服务消费者利用Ribbon实现负载均衡。
摘要由CSDN通过智能技术生成

目录

前言

实现高可用注册中心

 

前言

SpringCloud之Eureka(一)中,简单的配置了Eureka的单节点注册中心,但是在分布式环境中,我们需要充分考虑发生故障的情况,需要一些高可用方案。在这篇文章中,我将会构建一个高可用的Eureka服务注册中心。

Eureka Server的高可用方案实际上就是将自己作为服务向其他注册中心注册自己,这样就形成一组互相注册的服务注册中心,可以实现服务清单的相互同步,达到高可用效果。

实现高可用注册中心

  • 1.仿照之前的步骤再创建一个注册中心

之前配置单节点注册中心时,使用了eureka.client.fetch-registry=false和eureka.client.register-with-eureka=false,但是在高可用环境下,需要将自身注册到其他的注册中心,因此需要将这两个配置去除,这两个配置默认为true,全部配置如下所示:

#server1配置
#高可用下节点名字要一致
spring.application.name=server
#Eureka-Server配置
eureka.instance.hostname=server1
server.port=8089
#高可用时,此时不能使用localhost,指向别的注册中心地址
eureka.client.serviceUrl.defaultZone=http://server2:8087/eureka/


#server2配置
#高可用下节点名字要一致
spring.application.name=server
server.port=8087
#Eureka-Server配置
eureka.instance.hostname=server2
eureka.client.serviceUrl.defaultZone  = http://server1:8089/eureka/
  • 2.启动注册中心

启动两个注册中心之后,通过访问注册中心地址可以看到如下所示,Instances currently registered with Eureka出现了SERVER属性,并包含两个注册中心的地址,如果此时关闭其中一个注册中心,那么它的地址将被添加到unavailable-replicas属性值。

  • 3.配置服务提供者

在高可用注册中心下,服务提供者需要配置多个注册中心地址,配置如下:

spring.application.name=client
server.port = 1111
#指定服务注册地址
eureka.client.serviceUrl.defaultZone  = http://localhost:8090/eureka/,http://localhost:8087/eureka/

启动该服务之后,可以在两个注册中心页面看到该服务已经被注册到server1和server2上。可以使用另一个端口启动该服务,表示同一个服务可以由多个提供者同时提供。

  • 4.配置服务消费者

现在开始构建一个服务消费者,主要包含服务发现和服务消费,服务发现是由Eureka客户端完成的,而服务消费的任务是由Ribbon完成。Ribbon实在Eureka服务发现的基础上,实现了一套对服务实例的选择策略。

1)在之前服务提供者pom.xml基础上,添加Ribbon模块依赖spring-cloud-starter-ribbon,并配置properties文件。

<!--Ribbon-->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

 

#properties
#高可用下节点名字要一致
spring.application.name=consumer

server.port=1118
#Eureka-Server配置
eureka.instance.hostname=consumer1
eureka.client.serviceUrl.defaultZone  = http://localhost:8090/eureka/,http://localhost:8087/eureka/

2)在启动类上添加@EnableDiscoveryClient注解,让该应用注册为Eureka客户端应用,以获得服务发现的能力。同时添加一个RestTmplate的Bean实例,通过@LoadBalanced注解开启客户端负载均衡。

@EnableDiscoveryClient
@SpringBootApplication
public class DemoApplication {
    @Bean
    @LoadBalanced
    public RestTemplate getRestTempage(){
        return new RestTemplate();
    }
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

3)创建Controller,实现方法对服务提供者的test方法进行调用,这里通过上面注入的RestTemplate实例调用服务提供者方法,需要注意的是,调用的url不是通过具体的ip和端口号,而是通过服务提供者的服务名(不区分大小写)。

@RestController
public class TempController {
    @Autowired
    private RestTemplate restTemplate;
    @GetMapping("/consumerGet")
    public String temp(){
        return restTemplate.getForEntity("http://PRODUCER/get",String.class).getBody();
    }
}

4)启动消费者应用之后,可以调用http://localhost:1118/consumerGet可以获取服务提供者方法的返回值,并且可以在消费者控制台看到以下打印信息,包含服务提供者列表,各个实例请求总数量,第一次连接信息,上一次连接信息,总的请求失败量等。

 

 

如果多次调用,可以在两个服务提供者控制台看到负载均衡起到作用,我调用了五次然后服务提供者控制台情况显示如下:

 

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、 4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值