SpringCloud(1)-Eureka相关配置

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.rhkb.cn/news/329102.html

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

相关文章

面向对象-----继承

前面向大家介绍了面向对象中的封装性&#xff0c;今天再来向大家介绍面向对象的继承和多态的两大特性。 1.继承 1.1 为什么需要继承&#xff1f; 在java语言中&#xff0c;我们用类来描述世间万物&#xff0c;虽然万物非常复杂&#xff0c;但总有一些共同点&#xff0c;如果…

【贪心算法题目】

1. 柠檬水找零 这一个题目是一个比较简单的模拟算法&#xff0c;只需要根据手里的钱进行找零即可&#xff0c;对于贪心的这一点&#xff0c;主要是在20元钱找零的情况下&#xff0c;此时会出现两种情况&#xff1a;10 5 的组合 和 5 5 5 的组合&#xff0c;根据找零的特点&a…

网络模型-Qinq配置与应用

Qinq配置与应用 通过配置Qinq来实现利用公网提供的VLAN100使企业1互通&#xff0c;利用公网提供的VLAN200使企业2互通不同企业之间互相隔离。并通过在连接其它厂商设备的接口上配置修改0in0外层VLAN Tag的TPID值&#xff0c;来实现与其它厂商设备的互通。 一、创建VLAN #在Swi…

C - Sigma Problem(AtCoder Beginner Contest 353)

题目的链接: C - Sigma Problem (atcoder.jp) 题目&#xff1a; 样例&#xff1a; 题目大致含意: 给你n个数&#xff0c;让你对这n个数进行操作&#xff0c;比如当前是第i个&#xff0c;那么让a[i] 和 后面的每个数进行相加, 例如a[i] a[i 1] 注意的是a[i] a[i 1]的结果…

Stable Diffusion 3报告

报告链接&#xff1a;Stable Diffusion 3: Research Paper — Stability AI 文章目录 要点表现架构细节通过重新加权改善整流流量Scaling Rectified Flow Transformer Models灵活的文本编码器RF相关论文 引言 随着人工智能技术的飞速发展&#xff0c;文本到图像生成领域正经…

【map、set】C++用红黑树来封装map、set容器

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; C进阶 &#x1f389;其它专栏&#xff1a; C初阶 | Linux | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解map和set之用红黑树来封装map、set容器的相关内容。 如果看到最后您…

CasaOS系统玩客云安装内网穿透工具实现无公网IP远程访问

文章目录 前言1. CasaOS系统介绍2. 内网穿透安装3. 创建远程连接公网地址4. 创建固定公网地址远程访问 前言 2月底&#xff0c;玩客云APP正式停止运营&#xff0c;不再提供上传、云添加功能。3月初&#xff0c;有用户进行了测试&#xff0c;局域网内的各种服务还能继续使用&am…

kubeadm部署k8s v1.28

一、主机准备 主机硬件配置说明 作用IP地址操作系统配置k8s-master01192.168.136.55openEuler-22.03-LTS-SP12颗CPU 4G内存 50G硬盘k8s-node01192.168.136.56openEuler-22.03-LTS-SP12颗CPU 4G内存 50G硬盘k8s-node02192.168.136.57openEuler-22.03-LTS-SP12颗CPU 4G内存 50G…

C++: 多态

目录 一、多态的概念 二、多态的定义及实现 2.1虚函数 2.2虚函数的重写 2.3多态的构成条件 2.4虚函数重写的两个例外 1.协变 2.析构函数的重写 2.5虚函数重写的实质 2.6override 和 final&#xff08;C11&#xff09; 1.final 2.override 2.7重载、覆盖&#xff0…

Leetcode刷题笔记2:数组基础2

导语 leetcode刷题笔记记录&#xff0c;本篇博客记录数组基础1部分的题目&#xff0c;主要题目包括&#xff1a; 977.有序数组的平方 &#xff0c;209.长度最小的子数组 &#xff0c;59.螺旋矩阵II 知识点 滑动窗口 所谓滑动窗口&#xff0c;就是不断的调节子序列的起始位…

反射获取或修改对象属性的值

利用反射既可以获取也可以写入,首先咱们先写几个获取的例子。 一:利用反射修改各数据(利用resultField.set修改) 首先定义实体类 public class Dog {private String dogUser;private int age;把DogUser的"hahaha"改为"geggegegege" Dog dog = new Do…

Docker快速搭建Oracle服务

服务器&#xff1a;CentOS7.9 1.安装docker yum install -y docker 2. 设置镜像加速 修改 /etc/docker/daemon.json 文件并添加上 registry-mirrors 键值 阿里云的docker镜像需要自己注册账号&#xff0c;也可以不注册账号&#xff0c;直接使用下面的连接。 也可以写入多…

C语言 数组——计算最大值的函数实现

目录 计算最大值 计算最大值的函数实现 应用实例&#xff1a;计算班级最高分​编辑​编辑 返回最大值所在的下标位置 返回最大值下标位置的函数实现​编辑 一个综合应用实例——青歌赛选手评分​编辑​编辑​编辑​编辑​编辑 计算最大值 计算最大值的函数实现 应用实例&…

键盘盲打是练出来的

键盘盲打是练出来的&#xff0c;那该如何练习呢&#xff1f;很简单&#xff0c;看着屏幕提示跟着练。屏幕上哪里有提示呢&#xff1f;请看我的截屏&#xff1a; 截屏下方有8个带字母的方块按钮&#xff0c;这个就是提示&#xff0c;也就是我们常说的8个基准键位&#xff0c;我…

【蓝桥杯】

题目列表 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> using llunsigned long long; #define int ll const int N2e510; int k0; std::string s; int a,b,c,d; void solve() {char op;std::cin>>op;if(opA){std::string s;for(int i1;i&l…

Kafka-偏移量(含消费者事务)

Kafka概述 1.什么是偏移量&#xff1a; 在 Kafka 中&#xff0c;每个分区的消息都会被分配一个唯一的偏移量&#xff08;offset&#xff09;。偏移量简单来说就是消息在分区中的位置标识。 偏移量从 0 开始递增&#xff0c;每条消息的偏移量都会比前一条消息的偏移量大 1。 消…

如何对Linode Windows虚拟机进行“本地”访问

大部分时候&#xff0c;IT运维工作都可以远程进行&#xff0c;只要能通过网络访问被管理的系统&#xff0c;就可以执行几乎所有任务。如果因为某些原因导致无法通过网络访问呢&#xff1f;此时可能需要亲自到达相关硬件设备旁&#xff0c;通过“本地访问”来排错。 如果这些硬…

python实现520表白图案

今天是520哦&#xff0c;作为程序员有必要通过自己的专业知识来向你的爱人表达下你的爱意。那么python中怎么实现绘制520表白图案呢&#xff1f;这里给出方法&#xff1a; 1、使用图形库&#xff08;如turtle&#xff09; 使用turtle模块&#xff0c;你可以绘制各种形状和图案…

Thinkphp内核开发盲盒商城源码v2.0 对接易支付/阿里云短信/七牛云存储

源码简介 这套系统是我从以前客户手里拿到的,100完整可用,今天测试防红链接失效了,需要修改防红API即可!前端页面展示我就不放了,懂的都懂 优点是Thinkphp开发的&#xff0c;二开容易。 源码图片 资源获取&#xff1a;Thinkphp内核开发盲盒商城源码v2.0 对接易支付/阿里云短…

苹果MacOS系统使用微软远程桌面连接Windows电脑桌面详细步骤

文章目录 前言1. 测试本地局域网内远程控制1.1 Windows打开远程桌面1.2 局域网远程控制windows 2. 测试Mac公网远程控制windows2.1 在windows电脑上安装cpolar2.2 Mac公网远程windows 3. 配置公网固定TCP地址 前言 日常工作生活中&#xff0c;有时候会涉及到不同设备不同操作系…