SpringCloud-5_模块集群化
避免一台Server挂掉,影响整个服务,搭建server集群
创建e-commerce-eureka-server-9002微服务模块【作为注册中心】
创建步骤参考e-commerce-eureka-server-9001
修改pom.xml,加入依赖
同9001
创建resources/application.yml
9002的yml
server:
# 修改端口号port: 9002
eureka:instance:
# 创建主机域名(别名)hostname: eureka9002.comclient:#不向注册中心注册自己register-with-eureka: false#表示自己就是注册中心,作用就是维护注册服务实例,不需要去检索服务fetch-registry: falseservice-url:#设置与eureka-server9001交互的模块defaultZone: http://eureka9001.com:9001/eureka/创建主启动类EurekaApplication9002.java
类似9001
修改e-commerce-eureka-sever-9001微服务模块
修改9001的yml。只保留了修改部分
# 修改成域名的形式,需要host文件的映射支持hostname: eureka9001.com:9001service-url:#设置与eureka-server9002交互的模块,defaultZone: http://eureka9002.com:9002/eureka/修改hosts.文件
1.文件:C:\Windows\System32\drivers\etc\host
2.文件可以先拷贝到桌面,修改后,再拷贝回去
3.加入内容:
#eureka主机名和ip映射
127.0.0.1 eureka9001.com
127.0.0.1 eureka9002.com完成测试
启动9001和9002
打开浏览器,分别输入eureka9001.com和eureka9002.com,查看服务列表里面是否有对方服务
将member-service-provider-10000注册到EurekaServer集群(目前2台)
9001的域名改了,重新配置
新增了9002的服务群,用逗号“,”分隔后添加
eureka:client:service-url:#表示将自己注册到哪个eureka-serverdefaultZone: http://eureka9001.com:9001/eureka,http://eureka9002.com:9002/eureka将member-service-consumer-80注册到EurekaServer集群(目前2台)
同上
搭建会员中心服务提供方-provider集群
创建member-service-provider-10002
1.参考member-service-provider-l0000来创建member-service-provider-10002即可
2.创建好后,使用nember-service-provider-10000的源码和配置替换member-service-provider-10002生成的代码(不要到磁盘整体拷贝,会出现关联到member-service-provider-10000的问题,很麻烦,可以创建好新项目的包,然后再拷贝对应包下的文件,就不会出问题)
3.提醒,拷贝时不要忘记拷贝resources/mapper/MemberMapper.xml这些Xxx.xml文件
创建resources/application.yml
修改端口为:10002,name: member-service-provider-10002
修改主启动类名
改为带有10000和10002的类名,便于区分
完成测试
启动eureka server集群(目前2台)
启动member-service-provider--10000
启动member-service-provider-10002
测试页面
注意事项和细节
因为member.-service-provider-10000和member-service-provider-10002作为一个集群提供服务,因此需要将spring.application.name进行统一,都改为:
name: member-service-provider
这样消费方通过统一的别名进行负载均衡调用
配置服务消费端consumer-80使用会员中心服务集群
修改MemberConsumerController.java
说明:
1.MEMBER-SERVICE-PROVIDER就是服务提供方【集群】,注册到Eureka Server的名称
2.也就是服务提供方provider【集群】对外暴露的名称为MEMBER-SERVICE-PROVIDER
3.MEMBER-SERVICE-PROVIDER目前有两个Availability Zones member-service-provider:10000
还有一个member-service-provider:10002
需要增加一个注@LoadBalanced赋予RestTemplate负载均衡的能力,也就是会根据你的负载均衡
来选择某个服务去访问,默认是轮询算法,当然我们也可以自己配置负载均衡算法
//private static final String MEMBER_SERVICE_PROVIDER_URL="http://localhost:10000";private static final String MEMBER_SERVICE_PROVIDER_URL="http://MEMBER-SERVICE-PROVIDER";修改CustomizationBean.java
说明:配置注入RestTemplate bean/对象
这里的@LoadBalanced就是赋予RestTemplate负载均衡的能力
默认是使用轮询算法来访问远程调用接口/地址
@Bean@LoadBalancedpublic RestTemplate getRestTemplate(){为了看到测试效果,修改服务提供方
完成测试
启动eureka server集群(目前2台)
启动member-service-provider-10000
启动member-service-provider-10002
不急,先测试:
http://localhost:10000/member/query/1
http://localhost:10002/member/query/1
启动member-service-consumer-80
浏览器访问:http://localhost/member/consumer/query/1
这儿没有端口号是因为,localhost的缺省端口就是80
交替访问member服务说明:
1.注解@LoadBalanced底层是Ribbon支持算法
2.Ribbon和Eureka整合后consumeri直接调用服务而不用再关心地址和端口号,且该服务还有负载功能
获取Eureka Server服务注册信息-DiscoveryClient
需求分析
这里我们以服务消费方,去获取Eureka Server的服务注册信息为例
当然也可以在服务提供方获取Eureka Server的服务注册信息
代码实现
member-service-consumer-80/MemberConsumerController.java
调用getServices()获取服务列表,返回discoveryClient即可在网页显示。其余都是日志显示,用处不大。
@Resourceprivate DiscoveryClient discoveryClient;@GetMapping("/member/discovery")public Object discovery(){List<String> services = discoveryClient.getServices();for (String service : services) {log.info("服务={}",service);List<ServiceInstance> instances = discoveryClient.getInstances(service);for (ServiceInstance instance : instances) {log.info("服务号={},主机号={},端口号={},uri={}",instance.getInstanceId(),instance.getHost(),instance.getPort(),instance.getUri());}}return discoveryClient;}测试
浏览器地址栏输入:http://localhost/member/discovery
注意事项和细节说明
1.在引入DiscoveryClientl时,不要引入错误的包
正确的包,是一个接口:import org.springframework.cloud.client.discovery.DiscoveryClient;
错误的包,是一个类:import com.netflix.discovery.DiscoveryClient;
2.演示的是在服务消费方使用DiscoveryClient来完成服务发现,同样,在服务提供方模块也OK
至此,服务与发现已经完成。接下来是Ribbon负载均衡
相关文章:
SpringCloud-5_模块集群化
避免一台Server挂掉,影响整个服务,搭建server集群创建e-commerce-eureka-server-9002微服务模块【作为注册中心】创建步骤参考e-commerce-eureka-server-9001修改pom.xml,加入依赖同9001创建resources/application.yml9002的ymlserver: # 修改端口号por…...
AQS底层源码深度剖析-BlockingQueue
目录 AQS底层源码深度剖析-BlockingQueue BlockingQueue定义 队列类型 队列数据结构 ArrayBlockingQueue LinkedBlockingQueue DelayQueue BlockingQueue API 添加元素 检索(取出)元素 BlockingQueue应用队列总览图 AQS底层源码深度剖析-BlockingQueue【重点中的重…...
Kotlin协程:Flow的异常处理
示例代码如下:launch(Dispatchers.Main) {// 第一部分flow {emit(1)throw NullPointerException("e")}.catch {Log.d("liduo", "onCreate1: $it")}.collect {Log.d("liudo", "onCreate2: $it")}// 第二部分flow …...
qt下ffmpeg录制mp4经验分享,支持音视频(h264、h265,AAC,G711 aLaw, G711muLaw)
前言 MP4,是最常见的国际通用格式,在常见的播放软件中都可以使用和播放,磁盘空间占地小,画质一般清晰,它本身是支持h264、AAC的编码格式,对于其他编码的话,需要进行额外处理。本文提供了ffmpeg录…...
C#读取Excel解析入门-1仅围绕三个主要的为阵地,进行重点解析,就是最理性的应对上法所在
业务中也是同样的功能点实现。只是多扩展了很多代码,构成了项目的其他部分,枝干所在。但是有用的枝干,仅仅不超过三个主要的!所以您仅仅围绕三个主要的为阵地,进行重点解析,就是最理性的应对上法所在了 str…...
一起Talk Android吧(第五百一十八回:在Android中使用MQTT通信五)
文章目录 知识回顾问题描述解决过程经验分享各位看官们大家好,这一回中咱们说的例子是" 在Android中使用MQTT通信五",本章回内容与前后章节内容无关联。闲话休提,言归正转,让我们一起Talk Android吧! 知识回顾 我们在前面章回中介绍了如何使用MQTT通信,包含它…...
100种思维模型之混沌与秩序思维模型-027
人类崇尚秩序与连续性,我们习惯于我们的日常世界,它以线性方式运作,没有不连续或突跳。 为此,我们学会了期望各种过程以连续方式运行,我们的内心为了让我们更有安全感,把很多事物的结果归于秩序,…...
Java开发 - Redis初体验
前言 es我们已经在前文中有所了解,和es有相似功能的是Redis,他们都不是纯粹的数据库。两者使用场景也是存在一定的差异的,本文目的并不重点说明他们之间的差异,但会简要说明,重点还是在对Redis的了解和学习上。学完本…...
Python - 使用 pymysql 操作 MySQL 详解
目录创建连接 pymsql.connect() 方法的可传参数连接对象 conn pymsql.connect() 方法游标对象 cursor() 方法使用示例创建数据库表插入数据操作数据查询操作数据更新操作数据删除操作SQL中使用变量封装使用简单使用: import pymysqldb pymysql.connect(host,user…...
机器学习-卷积神经网络CNN中的单通道和多通道图片差异
背景 最近在使用CNN的场景中,既有单通道的图片输入需求,也有多通道的图片输入需求,因此又整理回顾了一下单通道或者多通道卷积的差别,这里记录一下探索过程。 结论 直接给出结论,单通道图片和多通道图片在经历了第一…...
考研复试——计算机组成原理
文章目录计算机组成原理1. 计算机系统由哪两部分组成?计算机系统性能取决于什么?2. 冯诺依曼机的主要特点?3. 主存储器由什么组成,各部分有什么作用?4. 什么是存储单元、存储字、存储字长、存储体?5. 计算机…...
硬件设计 之摄像头分类(IR摄像头、mono摄像头、RGB摄像头、RGB-D摄像头、鱼眼摄像头)
总结一下在机器人上常用的几种摄像头,最近在组装机器人时,傻傻分不清摄像头的种类。由于本人知识有限,以下资料都是在网上搜索而来,按照摄像头的分类整理一下,供大家参考: 1.IR摄像头: IRinfr…...
PTA:C课程设计(2)
山东大学(威海)2022级大一下C习题集(2)2-5-1 字符定位函数(程序填空题)2-5-2 判断回文(程序填空题)2-6-1 数字金字塔(函数)2-6-2 使用函数求最大公约数(函数)2-6-3 使用函数求余弦函…...
第四章:面向对象编程
第四章:面向对象编程 4.1:面向过程与面向对象 面向过程(POP)与面向对象(OOP) 二者都是一种思想,面向对象是相对于面向过程而言的。面向过程,强调的是功能行为,以函数为最小单位,考虑怎么做。面向对象&…...
Linux 安装npm yarn pnpm 命令
下载安装包 node 下载地址解压压缩包 tar -Jxf node-v19.7.0-linux-x64.tar.xz -C /root/app echo "export PATH$PATH:/app/node-v16.9.0-linux-x64" >> /etc/profile source /etc/profile ln -sf /app/node-v16.9.0-linux-x64/bin/npm /usr/local/bin/ ln -…...
linux SPI驱动代码追踪
一、Linux SPI 框架概述 linux系统下的spi驱动程序从逻辑上可以分为3个部分: SPI Core:SPI Core 是 Linux 内核用来维护和管理 spi 的核心部分,SPI Core 提供操作接口,允许一个 spi master,spi driver 和 spi device 在 SPI Cor…...
Ls-dyna材料的相关学习笔记
Elastic Linear elastic materials -Isotropic:各向同性材料 -orthotropic 正交各向异性的 -anistropic 各向异性的...
Arrays方法(copyOfRange,fill)
Arrays方法 1、Arrays.copyOfRange Arrays.copyOfRange的使用方法 功能: 将数组拷贝至另外一个数组 参数: original:第一个参数为要拷贝的数组对象 from:第二个参数为拷贝的开始位置(包含) to:…...
AcWing - 蓝桥杯集训每日一题(DAY 1——DAY 5)
文章目录一、AcWing 3956. 截断数组(中等)1. 实现思路2. 实现代码二、AcWing 3729. 改变数组元素(中等)1. 实现思路2. 实现代码三、AcWing 1460. 我在哪?(简单)1. 实现思路2. 实现代码四、AcWin…...
RHCSA-文件的其他命令(3.7)
目录 文件的其他命令: 文本内容统计wc 移动和复制(cp) 移动 查找文件的路径 压缩和解压缩 .tar(归档命令) shell-命令解释器 linux中的特殊字符 查看系统上的别名:alias 历史命令(his…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...
可靠性+灵活性:电力载波技术在楼宇自控中的核心价值
可靠性灵活性:电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中,电力载波技术(PLC)凭借其独特的优势,正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据,无需额外布…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
现代密码学 | 椭圆曲线密码学—附py代码
Elliptic Curve Cryptography 椭圆曲线密码学(ECC)是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础,例如椭圆曲线数字签…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
随着大语言模型(LLM)参数规模的增长,推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长,而KV缓存的内存消耗可能高达数十GB(例如Llama2-7B处理100K token时需50GB内存&a…...
【数据分析】R版IntelliGenes用于生物标志物发现的可解释机器学习
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍流程步骤1. 输入数据2. 特征选择3. 模型训练4. I-Genes 评分计算5. 输出结果 IntelliGenesR 安装包1. 特征选择2. 模型训练和评估3. I-Genes 评分计…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
