当前位置: 首页 > news >正文

SpringCloud Eureka搭建会员中心服务提供方-集群

😀前言
本篇博文是关于SpringCloud Eureka搭建会员中心服务提供方-集群,希望你能够喜欢

🏠个人主页:晨犀主页
🧑个人简介:大家好,我是晨犀,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在此感谢啦😊

文章目录

  • SpringCloud Eureka 服务注册与发现
      • 搭建会员中心服务提供方-集群
        • 架构示意图
        • 创建member-service-provider-10002
        • 创建resources/application.yml
        • 修改主启动类名
        • 完成测试
        • 注意事项和细节
      • 配置服务消费端member-service-consumer-80 使用会员中心服务集群
        • 架构图
        • 修改MemberConsumerController.java
        • 修改CustomizationBean.
        • 为了看到测试效果,修改服务提供方
        • 完成测试
          • 启动eureka server 集群(目前2 台)
          • 启动member-service-consumer-80
        • 交替访问member 服务说明:
          • 包依赖配置图
      • 获取Eureka Server 服务注册信息-DiscoveryClient
        • 需求分析/图解
        • 代码实现
        • 测试
        • 注意事项和细节说明

SpringCloud Eureka 服务注册与发现

搭建会员中心服务提供方-集群

架构示意图

image-20230827094503045

创建member-service-provider-10002

  1. 参考member-service-provider-10000 来创建member-service-provider-10002 即可
  2. 创建好后, 使用member-service-provider-10000 的源码和配置替换member-service-provider-10002 生成的代码(不要到磁盘整体拷贝,会出现关联到member-service-provider-10000 的问题,很麻烦,可以创建好新项目的包,然后再拷贝对应包下的文件,就不会出问题)
  3. 提醒,拷贝时不要忘记拷贝resources/mapper/MemberMapper.xml 这些xxx.xml 文件

创建resources/application.yml

  1. 创建好application.yml
  2. 从member-service-provider-10000 拷贝application.yml 的内容
  3. 修改端口号即可
server:port: 10002

修改主启动类名

  1. 修改member-service-provider-10000 的主启动类为MemberProviderApplication10000
@SpringBootApplication
@EnableEurekaClient
public class MemberProviderApplication10000 {public static void main(String[] args) {SpringApplication.run(MemberProviderApplication10000.class, args);}
}
  1. 修改member-service-provider-10002 的主启动类为MemberProviderApplication10002
@SpringBootApplication
@EnableEurekaClient
public class MemberProviderApplication10002 {public static void main(String[] args) {SpringApplication.run(MemberProviderApplication10002.class, args);}
}

完成测试

启动eureka server 集群(目前2 台)
启动member-service-provider-10000
启动member-service-provider-10002
测试页面
浏览器输入: http://eureka9001.com:9001/

image-20230827095024136

浏览器输入: http://eureka9002.com:9002/

image-20230827095043875

注意事项和细节

  1. 因为member-service-provider-10000 和member-service-provider-10002 作为一个集群提供服务, 因此需要将spring.application.name 进行统一
  2. 这样消费方通过统一的别名进行负载均衡调用

配置服务消费端member-service-consumer-80 使用会员中心服务集群

架构图

image-20230827095148765

修改MemberConsumerController.java

   //定义member_service_provider_url 这是一个基础url地址//使用shift+ctrl+u 进行字母大小写的切换/*** 说明:* 1. MEMBER-SERVICE-PROVIDER 就是服务提供方[集群], 注册到Eureka Server 的名称* 2. 也就是服务提供方[集群]对外暴露的名称为 MEMBER-SERVICE-PROVIDER* 3. MEMBER-SERVICE-PROVIDER 目前有 两个 Availability Zones member-service-provider:10000*    还有一个 member-service-provider:10002*    需要增加一个注解@LoadBalanced 赋予 RestTemplate 负载均衡的能力,也就是会根据你的负载均衡算法*    来选择某个服务去访问, 默认是轮询算法, 当然我们也可以自己配置负载均衡算法*/public static final String MEMBER_SERVICE_PROVIDER_URL ="http://MEMBER-SERVICE-PROVIDER";

修改CustomizationBean.

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

为了看到测试效果,修改服务提供方

  1. 在两个服务提供方的查询和添加返回结果处增加自己服务名称信息, 其它位置可参考加入
@GetMapping(value = "/member/get/{id}")
public Result getMemberById(@PathVariable("id") Long id) {Member member = memberService.queryMemberById(id);log.info("查询结果= " + member);if (member != null) {return Result.success("查询成功member-service-provider-10000", member);} else {return Result.error("402", "ID= " + id + " 不存在");}
}

完成测试

启动eureka server 集群(目前2 台)

​ 启动member-service-provider-10000
​ 启动member-service-provider-10002
​ 先测试: http://localhost:10000/member/get/1 和http://localhost:10002/member/get/1

http://localhost:10000/member/get/1

image-20230827103522399

http://localhost:10002/member/get/1

image-20230827103608420

启动member-service-consumer-80

​ 浏览器访问: http://localhost/member/consumer/get/1

image-20230827103650508

再次访问,会看到访问到不同的服务.

image-20230827103716243

交替访问member 服务说明:

  1. 注解@LoadBalanced 底层是Ribbon 支持算法。
  2. 2.Ribbon 和Eureka整合后consumer 直接调用服务而不用再关心地址和端口号,且该服务还有负载功能。
包依赖配置图

1.spring-cloud-starter-netflix-eureka-client 自带spring-cloud-starter-netflix-ribbon(如图)

image-20230827104018297

获取Eureka Server 服务注册信息-DiscoveryClient

需求分析/图解

  1. 先看需求分析示意图

image-20230827104057308

  1. 这里我们以服务消费方, 去获取Eureka Server 的服务注册信息为例讲解

image-20230827104125560

  1. 当然也可以在服务提供方获取Eureka Server 的服务注册信息

代码实现

  1. 所在模块member-service-consumer-80
  2. 修改com/my/springcloud/controller/MemberConsumerController.java
 @GetMapping("/member/consumer/discovery")public Object discovery() {List<String> services = discoveryClient.getServices();//遍历servicesfor (String service : services) {log.info("服务名={}",service);List<ServiceInstance> instances = discoveryClient.getInstances(service);for (ServiceInstance instance : instances) {log.info("id={},host={},port={},uri={}",instance.getServiceId(),instance.getHost(),instance.getPort(),instance.getUri());}}return discoveryClient;}
  1. 这里修改主启动类com/my/springcloud/MemberConsumerApplication.java
//排除DataSourceAutoConfiguration 自动配置
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
//@EnableEurekaClient 将该程序标识为EurekaClient
@EnableEurekaClient
//@EnableDiscoveryClient 注解启用服务发现
@EnableDiscoveryClient
public class MemberConsumerApplication {public static void main(String[] args) {SpringApplication.run(MemberConsumerApplication.class, args);}
}

测试

  1. 重启member-service-consumer-80
  2. 浏览器输出http://localhost/member/consumer/discovery

image-20230827104351757

后台信息:

image-20230827104419739

注意事项和细节说明

  1. 在引入DiscoveryClient 时,不要引入错误的包

    正确的包: import org.springframework.cloud.client.discovery.DiscoveryClient;
    错误的包: import com.netflix.discovery.DiscoveryClient;
    ​ 2.这里演示的是在服务消费方使用DiscoveryClient 来完成服务发现,同样,在服务提供方/模块也OK

文章到这里就结束了,如果有什么疑问的地方请指出,诸大佬们一起来评论区一起讨论😁
希望能和诸大佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

相关文章:

SpringCloud Eureka搭建会员中心服务提供方-集群

&#x1f600;前言 本篇博文是关于SpringCloud Eureka搭建会员中心服务提供方-集群&#xff0c;希望你能够喜欢 &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可以帮助到大家&#xff0c;您…...

详解TCP/IP协议第二篇:OSI参考模型详解

文章目录 写给自己的话 一&#xff1a;协议分层与OSI参考模型 二&#xff1a;通过对话理解分层 三&#xff1a;OSI参考模型 写给自己的话 不从恶人的计谋&#xff0c;不站罪人的道路&#xff0c;不坐亵慢人的座位&#xff0c;惟喜爱耶和华的律法&#xff0c;昼夜思想&#…...

OpenGL 函数列表

//纹理头文件加载 #define STB_IMAGE_IMPLEMENTATION #include "stb_image.h" //线框模式(Wireframe Mode) //glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); //翻转y轴 stbi_set_flip_vertically_on_load(true); //声明鼠标滚轮回调函数 void scroll_call…...

【C语言】每日一题(半月斩)——day1

目录 &#x1f60a;前言 一.选择题 1.执行下面程序&#xff0c;正确的输出是&#xff08;c&#xff09; 2.以下不正确的定义语句是&#xff08; &#xff09; 3.test.c 文件中包括如下语句&#xff0c;文件中定义的四个变量中&#xff0c;是指针类型的变量为【多选】&a…...

Spring MVC 七 - Locale 本地化

Spring各模块都支持国际化&#xff0c;SpringMVC也同样支持。DispatcherServlet通过Locale Resovler自动根据客户端的Locale支持国际化。 request请求上来后&#xff0c;DispatcherServlet查找并设置Locale Resovler&#xff0c;我们可以通过RequestContext.getLocale()获取到…...

力扣(LeetCode)算法_C++——替换后的最长重复字符

给你一个字符串 s 和一个整数 k 。你可以选择字符串中的任一字符&#xff0c;并将其更改为任何其他大写英文字符。该操作最多可执行 k 次。 在执行上述操作后&#xff0c;返回包含相同字母的最长子字符串的长度。 示例 1&#xff1a; 输入&#xff1a;s “ABAB”, k 2 输出…...

unity 编辑器时读取FairyGUI图集单个图像

原因 想要在编辑器扩展也能访问FairyGUI图集里面的小图&#xff0c;随便找了一下没有找到接口自己做一个 方法 使用UIPackage.GetItemByURL获得小图信息。从图集中复制出小图&#xff0c;如果有旋转就逆旋转90度即可 图集里面的小图是有可能旋转的&#xff0c;可以通过访问 …...

下载配置 maven并在 idea 上应用

目录 一 maven 定义 二 Maven特点 三 Maven仓库 四 安装配置maven 步骤一:准备安装包,解压 步骤二:配置maven的环境变量 步骤三:测试maven的环境变量是否配置成功 步骤四:配置maven本地仓库 步骤五:阿里云、腾讯镜像配置 步骤六:全局配置idea的maven路径 步骤七:创建…...

网站搭建从零开始(0)--域名的选择与解析

目录 确定用途 购买域名 使用可靠的注册商购买域名 想好域名关键词 检查域名是否可用 添加域名到购物车并完成购买 域名的解析 登录注册商账户 选择要配置的域名 进入DNS解析设置 添加DNS记录 保存配置 检查解析是否生效 提示 确定用途 在购买域名之前&#xf…...

数分面试题2-牛客

1、面对大方差如何解决 1&#xff0c;AB实验场景下&#xff0c;如果一个指标的方差较大表示它的波动较大&#xff0c;那么实验组和对照组的显著差异可能是因为方差较大即随机波动较大。解决方法有&#xff1a;PSM方法、CUPED(方差缩减) PSM代表"Propensity Score Matchin…...

Android codec2 编码 -- 基于录屏

文章目录 前言android 原生的应用srcreenrecordMediaCodec获取编码数据流程 前言 本篇文章主要是理解Android 12编码的流程&#xff0c; 首先从上层的应用出发理解mediacodec提供给外部API的用法。然后针对每个api 分析编码各个流程中框架中的流程。 熟悉一个框架的流程 可以…...

【Java基础篇 | 面向对象】--- 聊聊什么是多态(上篇)

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【JavaSE_primary】 本专栏旨在分享学习JavaSE的一点学习心得&#xff0c;欢迎大家在评论区讨论&#x1f48c; 目录 一、什么是多态二、多…...

如何使用 Node.js和Express搭建服务器?

如何使用NodeJs搭建服务器 1. 准备工作1.1 安装Node.js 2. 安装express2.1 初始化package.json2.2 安装express2.3 Express 应用程序生成器 欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段…...

帮公司面试了个要25K的测试,我问了他这些问题...

深耕IT行业多年&#xff0c;我们发现&#xff0c;对于一个程序员而言&#xff0c;能去到一线互联网公司&#xff0c;会给我们以后的发展带来多大的影响。 很多人想说&#xff0c;这个我也知道&#xff0c;但是进大厂实在是太难了&#xff0c;简历投出去基本石沉大海&#xff0…...

Matlab之创建空数组的多种方法汇总

一、matlab空数组是什么&#xff1f; 在MATLAB中&#xff0c;空数组是指没有元素的数组对象。它可以用于占位或者作为容器&#xff0c;等待后续添加元素。 二、创建空数组的多种方法 1、使用空方括号 [] 创建空矩阵 A []; % 创建一个空双精度矩阵 B logical([]); % 创建一…...

HTML实现移动端布局与页面自适应

我们所说的布局方式&#xff0c;这里我们通常指的是width和height在不同页面情况下面的改变。 常见页面的布局方式有 静态布局 &#xff08;px布局&#xff0c;就是固定其高宽&#xff0c;不论页面怎样放大缩小&#xff0c;其占领的依旧是&#xff0c;使用px固定了的高宽&…...

CSS3技巧36:backdrop-filter 背景滤镜

CSS3 有 filter 滤镜属性&#xff0c;能给内容&#xff0c;尤其是图片&#xff0c;添加各种滤镜效果。 filter 滤镜详见博文&#xff1a;CSS3中强大的filter(滤镜)属性_css3滤镜_stones4zd的博客-CSDN博客 后续&#xff0c;CSS3 又新增了 backdrop-filter 背景滤镜。 backdr…...

【计算机网络】传输层协议——TCP(上)

文章目录 TCPTCP协议段格式报头和有效载荷如何分离&#xff1f;4位首部长度 TCP可靠性确认应答机制的提出序号和确认序号为什么序号和确认序号在不同的字段&#xff1f; 16位窗口大小 6个标志位标志位本质具体标志位PSHRSTURG 超时重传机制 文章目录 TCPTCP协议段格式报头和有效…...

GO语言网络编程(并发编程)Goroutine池

GO语言网络编程&#xff08;并发编程&#xff09;Goroutine池 1. Goroutine池 1.1.1. worker pool&#xff08;goroutine池&#xff09; 本质上是生产者消费者模型可以有效控制goroutine数量&#xff0c;防止暴涨需求&#xff1a; 计算一个数字的各个位数之和&#xff0c;例…...

C++面试/笔试准备,资料汇总

文章目录 后端太卷&#xff0c;建议往嵌入式&#xff0c;qt&#xff0c;测试&#xff0c;音视频&#xff0c;C一些细分领域投简历。有任何疑问评论区聊&#xff0c;我看到了回复 C面试/笔试准备&#xff0c;资料汇总自我介绍项目实习尽可能有1.编程语言&#xff1a;一.熟悉C语言…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分&#xff1a; 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析&#xff1a; CTR…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

python执行测试用例,allure报乱码且未成功生成报告

allure执行测试用例时显示乱码&#xff1a;‘allure’ &#xfffd;&#xfffd;&#xfffd;&#xfffd;&#xfffd;ڲ&#xfffd;&#xfffd;&#xfffd;&#xfffd;ⲿ&#xfffd;&#xfffd;&#xfffd;Ҳ&#xfffd;&#xfffd;&#xfffd;ǿ&#xfffd;&am…...

2023赣州旅游投资集团

单选题 1.“不登高山&#xff0c;不知天之高也&#xff1b;不临深溪&#xff0c;不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...

【VLNs篇】07:NavRL—在动态环境中学习安全飞行

项目内容论文标题NavRL: 在动态环境中学习安全飞行 (NavRL: Learning Safe Flight in Dynamic Environments)核心问题解决无人机在包含静态和动态障碍物的复杂环境中进行安全、高效自主导航的挑战&#xff0c;克服传统方法和现有强化学习方法的局限性。核心算法基于近端策略优化…...

SQL慢可能是触发了ring buffer

简介 最近在进行 postgresql 性能排查的时候,发现 PG 在某一个时间并行执行的 SQL 变得特别慢。最后通过监控监观察到并行发起得时间 buffers_alloc 就急速上升,且低水位伴随在整个慢 SQL,一直是 buferIO 的等待事件,此时也没有其他会话的争抢。SQL 虽然不是高效 SQL ,但…...