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.mzph.cn/news/839334.shtml

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

相关文章

ASP+ACCESS基于BS产品销售管理系统

2. 网页制作工具 a) 网页设计工具 网页主要使用Frontpage2003&#xff0c;Dreamweaver Mx辅助制作。 Frontpage 2003 frontpage2003是在frontpage2000基础上的网页工具。frontpage2003保留和发展了frontpage 2000的优秀功能&#xff0c;并根据用户的的要求再次增加了九大新…

如何用PLC监听消防系统485总线通讯获取火灾报警数据

本文由艺捷自动化编写&#xff0c;艺捷自动化旗下产品有艺捷自动化网站和易为二维码说明书小程序&#xff08;微信&#xff09; 前言&#xff0c;先来说一下为什么会有这么一个奇怪的应用。在一个自动化系统改造升级项目中&#xff0c;甲方要求把消防的画面加到他们的后台上。…

word如何按照原本页面审阅文档

1 视图-阅读视图 2 视图&#xff0c;自己看&#xff0c;懒得打字了哈哈

vulhub——ActiveMQ漏洞

文章目录 一、CVE-2015-5254(反序列化漏洞)二、CVE-2016-3088&#xff08;任意文件写入漏洞&#xff09;2.1 漏洞原理2.2 写入webshell2.3 写入crontab 三、CVE-2022-41678&#xff08;远程代码执行漏洞&#xff09;方法一方法2 四、CVE-2023-46604&#xff08;反序列化命令执行…

升级版网创教程wordpress插件自动采集并发布

主要功能&#xff1a; wordpress 插件主题系列支持自动采集并发布。 主要采集: 福缘&#xff0c;中创&#xff0c;冒泡 自动采集各大项目网进行整合发布到自己个人网站 插件话更新&#xff0c;减少网络请求&#xff0c;提升稳定性 代码完美开源 傻瓜式操作&#xff0c;一…

【MySQL】MySQL的安装和基本概念

MySQL的安装和基本概念 一、环境安装1、环境及配置2、下载安装 二、基本概念1、主流数据库2、mysql和mysqld的区别和概念&#xff08;1&#xff09;概念1&#xff1a;了解CS结构&#xff08;2&#xff09;概念2&#xff1a;数据库指的是什么&#xff08;3&#xff09;概念3&…

【Linux】:进程切换

朋友们、伙计们&#xff0c;我们又见面了&#xff0c;本期来给大家解读一下有关Linux进程切换的知识点&#xff0c;如果看完之后对你有一定的启发&#xff0c;那么请留下你的三连&#xff0c;祝大家心想事成&#xff01; C 语 言 专 栏&#xff1a;C语言&#xff1a;从入门到精…

【AI副业教程】日赚5000+涨粉3000,自媒体新玩法!

​StartAI是一款专为设计师打造的基于Photoshop的AI工具&#xff0c;它提供了一系列强大的AI功能如&#xff1a;文生图、生成相似图、线稿上色、无损放大、局部重绘、扩图、艺术融合、提示词、智能擦除、风格选择等。https://www.istarry.com.cn/?sfromHGtsRq 你们能想象吗&a…

【Android安全】AOSP版本对应编号| AOSP版本适配Pixel或Nexus型号 | 驱动脚本下载地址

AOSP版本对应编号 https://source.android.com/docs/setup/about/build-numbers?hlzh-cn#source-code-tags-and-builds 例如android-8.1.0_r1 对应的编号是OPM1.171019.011 可以适配Pixel 2 XL AOSP驱动脚本下载 编译AOSP时&#xff0c;需要Google的驱动&#xff0c;后面才…

【分享】3种方法取消PPT的“限制保护”

PPT如果设置了有密码的“只读方式”&#xff0c;每次打开PPT&#xff0c;都会出现对话框&#xff0c;提示需要输入密码才能修改文件&#xff0c;否则只能以“只读方式”打开。 以“只读方式”打开的PPT就会被限制&#xff0c;无法进行编辑修改等操作。那如果后续不需要“限制保…

SpringBoot+layuimini实现角色权限菜单增删改查(layui扩展组件 dtree)

角色菜单 相关组件方法效果图代码实现资源菜单树组件实现权限树方法js这里我先主要实现权限树的整体实现方法&#xff0c;如果是直接查看使用的话可以只看这里&#xff01; 后端代码Controlle层代码Service代码及实现类代码Service代码ServiceImpl代码 resourceMapper 代码role…

从零开始傅里叶变换

从零开始傅里叶变换 1 Overview2 傅里叶级数2.1 基向量2.2 三角函数系表示 f ( t ) f(t) f(t)2.2.1 三角函数系的正交性2.2.2 三角函数系的系数 2.3 复指数函数系表示 f ( t ) f(t) f(t)2.3.1 复指数函数系的系数2.3.2 复指数函数系的正交性 2.4 傅里叶级数总结 3 傅里叶变换…

如何将手机中的音乐转移到 SD 卡上?轻松传输音乐

概括 如何将音乐从手机转移到 SD 卡&#xff1f;我们的智能手机可以充当个人点唱机&#xff0c;因此有效管理我们的音乐库变得至关重要。无论您是存储空间不足还是只是想整理您的音乐收藏&#xff0c;将音乐从手机传输到 SD 卡都是一个实用的解决方案。 在本指南中&#xff0…

二叉树的递归实现及例题

目录 遍历方式 示例 原理 前序遍历示例 二叉树的节点个数 原理 层序遍历 原理 这样做的目的是 判断完全二叉树 例题 ​编辑 思路 代码 遍历方式 二叉树的遍历方式可分为&#xff1a; 前序遍历&#xff1a;先访问根&#xff0c;访问左子树&#xff0c;在访问右子…

浏览器的下载行为基本原理

浏览器解析 在使用浏览器访问某些资源时&#xff0c;有些资源是直接下载有些资源是直接打开。例如前端的html&#xff0c;xml&#xff0c;css&#xff0c;图片等资源都是直接打开&#xff0c;而txt&#xff0c;excel等文件是直接下载。那么如何控制访问一个资源时是下载文件还…

App Inventor 2 如何接入ChatGPT:国内访问OpenAI的最佳方式

如何接入OpenAI 由于国内无法访问OpenAI&#xff0c;KX上网可选大陆及香港&#xff08;被屏蔽&#xff09;以外才行。因此对于大多数人来说&#xff0c;想体验或使用ChatGPT就不太便利&#xff0c;不过App Inventor 2 为我们提供了相对便利的一种方式&#xff0c;即“试验性质…

C# run Node.js

C# run nodejs Inter-Process Communication&#xff0c;IPC Process类 启动Node.js进程&#xff0c;通过标准输入输出与其进行通信。 // n.js// 监听来自标准输入的消息 process.stdin.on(data, function (data) {// 收到消息后&#xff0c;在控制台输出并回复消息console.l…

连锁服装门店补货一般怎样的流程

连锁服装门店的补货流程通常包括以下四个关键步骤&#xff1a; 分析销售数据和库存情况 首先&#xff0c;连锁服装门店需要定期分析销售数据和库存情况。通过销售数据可以了解各款商品的销售情况、热销款式和滞销款式等信息。同时&#xff0c;需要检查每个门店的库存情况&…

06Django项目--用户管理系统--新增

对应视频链接点击直达 06Django项目--用户管理系统--新增 对应视频链接点击直达模块构思a&#xff0c;用户信息的构成&#xff08;表结构设计&#xff09;b&#xff0c;models里面的设计 用户新增页面设计a&#xff0c;先在模版里面选一个新增的样式b&#xff0c;然后删除该页面…

win32-鼠标消息、键盘消息、计时器消息、菜单资源

承接前文&#xff1a; win32窗口编程windows 开发基础win32-注册窗口类、创建窗口win32-显示窗口、消息循环、消息队列 本文目录 键盘消息键盘消息的分类WM_CHAR 字符消息 鼠标消息鼠标消息附带信息 定时器消息 WM_TIMER创建销毁定时器 菜单资源资源相关菜单资源使用命令消息的…