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…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...

黑马Mybatis
Mybatis 表现层:页面展示 业务层:逻辑处理 持久层:持久数据化保存 在这里插入图片描述 Mybatis快速入门 中,Ingress是一个API对象,它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress,你可…...

通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...

前端开发面试题总结-JavaScript篇(一)
文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包(Closure)?闭包有什么应用场景和潜在问题?2.解释 JavaScript 的作用域链(Scope Chain) 二、原型与继承3.原型链是什么?如何实现继承&a…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...