SpringCloud(1)-Eureka相关配置

news/2024/11/17 20:17:52/文章来源:https://www.cnblogs.com/marigo/p/18200013

1.新建Module-注册中心

image.png|338
作为注册中心

1.1配置 pom.xml

<!-- 引入 eureka-server --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>

1.2配置application.yml

server:port: 9001eureka:instance:hostname: localhost # Eureka 服务端的主机名client:register-with-eureka: false # 是否将自己注册到 Eureka 服务端,表明自己是一个 Eureka 注册中心,职责是维护服务实例,并不需要注册自己fetch-registry: false # 是否从 Eureka 服务端获取注册信息service-url:defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ #设置与 eureka server 交互的模块,查询服务和注册服务都需要依赖这个地址

1.3新建启动类

@SpringBootApplication
@EnableEurekaServer //开启Eureka服务
public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class, args);}
}

1.4测试

浏览器访问 http://localhost:9001/
image.png

2.服务提供者

配置服务提供者的Module信息

2.1 服务提供者引入eureka-client依赖

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>

2.2 配置application.yml

eureka:client:register-with-eureka: true # 将自己注册到 Eureka 服务端fetch-registry: true # 是否从 Eureka 服务端获取注册信息,默认为true,集群必须为true,才能配合负载均衡service-url:defaultZone: http://localhost:9001/eureka/ #设置与 eureka server 交互的模块,查询服务和注册服务都需要依赖这个地址

2.3 设置启动类

@SpringBootApplication
@EnableEurekaClient //开启Eureka客户端
public class MemberApplication {public static void main(String[] args) {SpringApplication.run(MemberApplication.class, args);}
}

2.4 测试

启动客户端的启动类后,访问 localhost:9001,会看到新注册的实例
image.png
实例的名称是怎么确定的呢,这是在我们的application.yml自定义的

spring:  application:  name: member-service-provider #配置应用的名称

3.服务消费者

配置服务消费者的Module信息

3.1 引入依赖

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency>

3.2 配置 application.yml

eureka:client:register-with-eureka: true # 将自己注册到 Eureka 服务端fetch-registry: true # 是否从 Eureka 服务端获取注册信息,默认为true,集群必须为true,才能配合负载均衡service-url:defaultZone: http://localhost:9001/eureka/ #表示关联的eureka服务端地址,注册/拉取服务信息

3.3 配置启动类

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

3.4 测试

启动,测试
image.png

4.Eureka自我保护模式

在以上测试中,我们会发现eureka页面中有以下红色提示:
image.png

  • 默认情况下EurekaClient定时向EurekaServer端发送心跳包
  • 如果Eureka在server端在一定时间内(默认90秒)没有收到EurekaClient发送心跳包便会直接从服务注册列表中剔除该服务
  • 如果Eureka 开启了自我保护模式/机制, 那么在短时间(90秒中)内丢失了大量的服务实例心跳,这时候EurekaServer会开启自我保护机制,不会剔除该服务(该现象可能出现在如果网络不通或者阻塞) 因为客户端还能正常发送心跳,只是网络延迟问题,而保护机制是为了解决此问题而产生的
  • 可以在eureka-server端禁用自我保护模式,设置application.yml
  server:enable-self-preservation: false # 关闭自我保护机制eviction-interval-timer-in-ms: 6000 # 设置心跳检测的时间间隔,默认是60秒
  • 设置eureka-client端 application.yml
eureka:instance:lease-expiration-duration-in-seconds: 5 # Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒,默认90秒,超过这个时间服务端会将实例从注册列表中剔除lease-renewal-interval-in-seconds: 2 # eureka客户端向服务端发送心跳的时间间隔,单位为秒,默认30秒

5.搭建EurekaServer集群

微服务RPC远程服务调用最核心的是实现高可用,如果注册中心只有1个,那么一旦出现故障,导致整个服务环境都不可用,解决方案就是搭建Eureka注册中心集群,并且实现负载均衡和故障容错。

5.1 新建Module-第二个注册中心

配置过程如第一个注册中心,区别是appication.yml的配置:

server:port: 9002eureka:instance:hostname: eureka9002.com # 区别于9001的注册中心client:register-with-eureka: falsefetch-registry: falseservice-url:defaultZone: http://eureka9001:9001/eureka/ # 相互注册

因为是相互注册,所以把第一个注册中心的hostname改成了eureka9001.com

server:port: 9001eureka:instance:hostname: eureka9001.com # Eureka 服务端的主机名client:register-with-eureka: false fetch-registry: false service-url:defaultZone: http://eureka9002.com:9002/eureka/ 

5.2 设置系统hosts

C:\Windows\System32\drivers\etc\hosts 加入

#eureka 主机名和 ip 映射
127.0.0.1 eureka9001.com
127.0.0.1 eureka9002.com

5.3 测试

浏览器打开对应的地址,会发现互相指向,按理说配置好hosts文件后,我应该访问eureka9001.com/9001eureka9002.com/9002,但是没能成功,先用localhost:9001localhost:9002 进行测试
image.png|199
image.png|178

5.4 服务提供者注册到Eureka集群

注册到多个eureka即可
image.png
启动后,进行测试,也就是到localhost:9001localhost:9002 查看注册成功

5.5 服务消费者注册到Eureaka集群

注册到多个eureka
image.png

6.搭建服务提供方集群

Eureka已经搭建好集群,实际中服务提供方也是会有多个形成一个集群

6.1 新建一个新的服务提供方

复制粘贴第一个服务提供方的代码,唯一要必须修改的地方是端口号,我们设置成10003,其中spring.application.name 必须统一,因为要作为一个集群提供服务
进行测试:
image.png

7.服务消费者使用服务集群

7.1 修改Controller

原先的Controller如下,具体来说,MEMBER_SERVICE_PROVIDER_URL被固定了:

@RestController
@Slf4j
public class MemberConsumerController {public static final String MEMBER_SERVICE_PROVIDER_URL = "http://localhost:10002";@Resourceprivate RestTemplate restTemplate;@PostMapping("/member/consumer/save")public Result<Member> save(Member member) {return restTemplate.postForObject(MEMBER_SERVICE_PROVIDER_URL + "/member/save", member, Result.class);}@GetMapping("/member/consumer/get/{id}")public Result<Member> get(@PathVariable("id") Long id) {return restTemplate.getForObject(MEMBER_SERVICE_PROVIDER_URL + "/member/get/" + id, Result.class);}}

我们修改成服务提供者[集群]的注册别名:
image.png|407
修改后:

public static final String MEMBER_SERVICE_PROVIDER_URL = "http://MEMBER-SERVICE-PROVIDER";

因为我们现在的服务提供者是集群,所以需要使用负载均衡,加上注解@LoadBalanced赋予RestTemplate负载均衡的能力, [即选择 MEMBER-SERVICE-PROVIDER 某一个服务访问]

@Configuration
public class CustomizationBean {// 注入 RestTemplate@Bean@LoadBalancedpublic RestTemplate getRestTemplate() {return new RestTemplate();}
}

7.2 测试

启动服务消费者,进行测试
image.png|500
再发送一次
image.png|500
会发现当前负载均衡的策略是轮询算法

8.获取Eureka Server服务注册信息

以服务消费者为例获取eureka的服务注册信息

8.1 修改Controller

我们在cotroller加入代码

    @Resourceprivate DiscoveryClient discoveryClient;@GetMapping("/member/consumer/discovery")public Object discovery() {List<String> services = discoveryClient.getServices();for (String element : services) {System.out.println("======== 服 务 名 " + element +"=======================");List<ServiceInstance> instances = discoveryClient.getInstances(element);for (ServiceInstance instance : instances) {System.out.println(instance.getServiceId() + "\t" + instance.getHost() + "\t" + instance.getPort() + "\t" + instance.getUri());}}return this.discoveryClient;}

其中,DiscoverClient引入下面包的:
image.png

8.2 修改启动类

添加@EnableDiscoveryClient注解

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

8.3 测试

启动后,浏览器访问http://localhost/member/consumer/discovery
浏览器返回:

{"services": ["member-service-consumer","member-service-provider"],"order": 0
}

后台返回:
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/708578.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA笔记[2]-拨码开关控制LED灯

使用四个拨码开关的异或逻辑亮灯控制LED灯亮灭.摘要 使用四个拨码开关的异或逻辑亮灯控制LED灯亮灭. 关键信息系统macOS 14.4.1,Apple Silicon M2 开发板:Sipeed-Tang-Primer-20k FPGA芯片:GW2A-LV18PG256C8/I7(GW2A-18C-PBGA256) 工具链:YosysHQ/oss-cad-suite原理简介 LUT4简…

stm32f103c8t6 HAL库更改中断向量表(app部分)

打开HAL库工程的system_stm32f1xx.c文件 /* 注意:以下向量表地址必须与链接器一致定义配置。*//*!< 如果需要重新定位向量表,请取消注释以下行 在 Flash 或 Sram 中的任何位置,否则向量表将保持在自动状态 重新映射选择的启动地址 *//* #define USER_VECT_TAB_…

向web服务器下载文件

web服务器向客户端发送文件 Web服务器读取一个文件的二进制数据,把这组二进制数据发送个客户端,服务器发送给客户端的HTML文档的本质也是二进制。客户端使用以下代码读文件 response = urllib.request.urlopen(url + "?" + urllib.parse.quote(fileName)) data = …

Delphi TMSMQTT使用笔记

服务端用的是 mosquitto ,下载地址https://mosquitto.org/download/ 安装完成后需要配置 找到安装目录:mosquitto.conf,打开后修改 allow_anonymous false(禁止匿名登录),password_file D:\Program Files\mosquitto\pwfile.example(密码存放位置) 创建新用户,安装目录…

沪锡

沪锡要想牛市 必须要突破这里286700 要不然就是ABC反弹结束了。 小周期 反弹还有最后一个3-5 然后迎来回调 然后等待看是什么级别的回调。

产业园区开发运营及盈利模式分析

摘 要:产业园区一般由政府或企业开发建设,是区域经济和产业发展的重要空间载体,具有显著的资源集聚能力和产业规模效益,承担着产业要素集聚、新型产业培育、经济高质量发展和新型城镇化建设等重要使命。然而,当前国内部分产业园区因前期开发投入规模大、后期招商及运营管理…

使用Github Actions + Watchtower 实现项目CI/CD

使用Github Actions + Watchtower 实现项目CI/CD 前言 对于我们这种个人开发者,将程序部署在服务器上一般都是通过宝塔部署来确保服务能够一直存活,但是对于一个经常改来改去的项目,这是一个非常头疼的事情,需要重复地本地编译-->打开宝塔-->输入账号密码(甚至安全模…

Atcoder 题目选做(三)

Atcoder 题目选做(三)(20/20)推荐阅读:#5、#7、#11、#13、#15、#18、#19\(\text{By DaiRuiChen007}\)1. [ARC152E] Xor Annihilation Problem Link给 \(2^n-1\) 个动点,权值为 \(1\sim 2^n-1\) 的排列,对于每个点,设其左右两边所有点权异或和分别为 \(L,R\),那么他会向…

铁矿石 短线

周初要关注893一线阻力 ABC调整结构会出现 30分钟周期:

简单纯粹

如何做到极致的简单纯粹 2024.5.16-5.172024.5.17