JavaWeb_SpringCloud微服务_Day1-eureka, ribbon, nacos
JavaWeb_SpringCloud微服务_Day1-eureka, ribbon, nacos
- 认识微服务
- 微服务技术对比
- 分布式服务架构案例
- 远程调用
- eureka注册中心
- 原理
- 搭建EurekaServer
- 服务注册
- 服务发现
- Ribbon负载均衡
- 修改负载均衡
- 饥饿加载
- nacos注册中心
- 快速入门
- eureka和nacos对比
- 来源
认识微服务
微服务技术对比
| Dubbo | SpringCloud | SpringCloudAlibaba | |
|---|---|---|---|
| 注册中心 | zookeeper, Redis | Eureka, Consul | Nacos, Eureka |
| 服务远程调用 | Dubbo协议 | Feign(http协议) | Dubbo, Feign |
| 配置中心 | 无 | SpringCloudConfig | SpringCloudConfig, Nacos |
| 服务网关 | 无 | SpringCloudGateway, Zuul | SpringCloudGateway, Zuul |
| 服务监控和保护 | dubbo-admin, 功能弱 | Hystrix | Sentinel |
分布式服务架构案例
远程调用
- 注册RestTemplate
/*** 创建RestTemplate并注入Spring容器* @return*/ @Bean public RestTemplate restTemplate(){return new RestTemplate(); } - 服务远程调用RestTemplate
@Autowired private RestTemplate restTemplate;public Order queryOrderById(Long orderId) {// 1.查询订单Order order = orderMapper.findById(orderId);// 2. 利用RestTemplate发起http请求, 查询用户// 2.1 url路径String url = "http://localhost:8081/user/"+order.getUserId();// 2.2 发送http请求, 实现远程调用User user = restTemplate.getForObject(url, User.class);// 3 封装user到orderorder.setUser(user);// 4.返回return order; }
eureka注册中心
原理
在Eureka架构中, 微服务角色有两类:
- EurekaServer: 服务端, 注册中心
- 记录服务信息
- 心跳监控
- EurekaClient: 客户端
- Provider: 服务提供者
- 注册自己的信息到EurekaServer
- 每隔30秒向EurekaServer发送心跳
- Consumer: 服务消费者
- 根据服务名称从EurekaServer拉取服务列表
- 基于服务列表做负载均衡, 选中一个微服务后发起远程调用
- Provider: 服务提供者
搭建EurekaServer
- 引入eureka-server依赖
<!-- eureka服务端 --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> - 添加@EnableEurekaServer注解
@EnableEurekaServer @SpringBootApplication public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class, args);} } - 在application.yml中配置eureka地址
server:port: 10086 spring:application:name: eurekaserver eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka/
服务注册
- 引入eureka-client依赖
<!-- eureka客户端 --> <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> - 在application.yml中配置eureka地址
- 启动多个实例: 右键服务copy configuration, 在启动项vm option中修改端口号
服务发现
- 给RestTemplate添加@LoadBalanced注解, 负载均衡
@LoadBalanced public RestTemplate restTemplate(){return new RestTemplate(); } - 用服务提供者的服务名称远程调用
// String url = "http://localhost:8081/user/"+order.getUserId(); String url = "http://userserver/user/"+order.getUserId();
Ribbon负载均衡
修改负载均衡
- 代码方式 (全体)
/*** 更换负载均衡策略为随机* @return*/ @Bean public IRule randomRule() {return new RandomRule(); } ```erer - 配置文件方式 (只针对某个微服务)
userserver: # 给某个微服务配置负载均衡规则,这里是userserver服务ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
饥饿加载
- Ribbon默认是采用懒加载, 即第一次访问时才会创建LoadBalanceClient, 请求时间很长.
- 饥饿加载在项目启动时创建, 降低第一次访问的耗时
ribbon:eager-load: # 饥饿加载enabled: trueclients: userserver # 指定服务
nacos注册中心
快速入门
- 父工程添加spring-cloud-alibaba管理依赖
<!-- nacos的管理依赖 --> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.5.RELEASE</version><type>pom</type><scope>import</scope> </dependency> - nacos客户端依赖
<!-- nacos客户端依赖 --> <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> - 配置文件
spring:cloud:nacos:server-addr: localhost:8848 # nacos服务地址 - 集群配置
spring:cloud:nacos:server-addr: localhost:8848 # nacos服务地址discovery:cluster-name: SH # 集群地址 - NacosRule负载均衡策略
userserver: # 给某个微服务配置负载均衡规则,这里是userservice服务ribbon:# NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则- 优先选择同集群服务实例列表
- 本地集群找不到提供者, 才去其他集群寻找, 并且会报警告
- 确定了可用实例列表后, 再采用随机负载均衡挑选实例
- 命名空间
spring:cloud:nacos:discovery:namespace: xxx # 命令空间- namespace用来做环境隔离
- 每个namespace都有唯一id
- 不同namespace下的服务不可见
eureka和nacos对比
- nacos非临时实例
spring:cloud:nacos:discovery:ephemeral: false # 设置为非临时实例 - nacos与eureka的共同点
- 都支持服务注册和服务拉取
- 都支持服务提供者心跳方式做健康检测
- nacos与eureka的区别
- nacos支持服务端主动检测提供者状态: 临时实例采用心跳模式, 非临时实例采用主动检测模式
- 临时实例心跳不正常会被剔除, 非临时实例则不会被剔除
- nacos支持服务列表变更的消息推送模式, 服务列表更新更及时
- nacos集群默认采用ap方式(强调数据的可用性), 当集群中存在非临时实例时, 采用cp模式(强调数据的可靠性和一致性); eureka采用ap方式
来源
黑马程序员. SpringCloud微服务
相关文章:
JavaWeb_SpringCloud微服务_Day1-eureka, ribbon, nacos
JavaWeb_SpringCloud微服务_Day1-eureka, ribbon, nacos 认识微服务微服务技术对比 分布式服务架构案例远程调用 eureka注册中心原理搭建EurekaServer服务注册服务发现 Ribbon负载均衡修改负载均衡饥饿加载 nacos注册中心快速入门eureka和nacos对比 来源 认识微服务 微服务技术…...
数据科学领域常用python库
pandas Pandas 的名称源自 “ panel data ”,这是一个计量经济学术语,用于表示多维结构化数据集和 “ Python 数据分析”。众所周知,清理和转换数据在数据分析中非常重要,Pandas 提供了丰富的数据结构和功能,使数据处…...
【Android关键字】startActivityForResult/onActivityResult/setResult方法的使用
最近在写一个安卓程序,在程序里需要用到startActivityForResult这个Intent操作关键字,与该关键字有关的还有onActivityResult和setResult。这里对其用法进行一个总结。 三者在API中的形式 //startActivityForResult与startActivity类似,只不…...
PyTorch深度学习实战(5)——计算机视觉
PyTorch深度学习实战(5)——计算机视觉 0. 前言1. 图像表示2. 将图像转换为结构化数组2.1 灰度图像表示2.2 彩色图像表示 3 利用神经网络进行图像分析的优势小结系列链接 0. 前言 计算机视觉是指通过计算机系统对图像和视频进行处理和分析,利…...
遥感目标检测(1)--R3Det
目录 一、概述 二、三个挑战 三、网络架构编辑 1、旋转RetinaNet 2、精细化旋转RetinaNet 3、与RoIAlign(感兴趣区域插值)进行比较 4、消融实验与对比实验 一、概述 R3Det论文中提到一个端到端的精细化的单级旋转检测器,通过从粗到细…...
使用 vue3-tel-input电话组件时,为什么通过v-model绑定的默认值无效而 通过:value绑定有效?
问题: 使用第三方 vue3-tel-input电话组件时,通过v-model绑定具有初始值的电话变量,但input框内显示的初始值为空? 排查过程: 将 v-model绑定改为 :value绑定后,电话变量初始值竟然能够显示在vue3-tel-inp…...
【运维工程师学习二】OS系统管理
【运维工程师学习二】OS系统管理 1、操作系统管理2、进程管理3、进程的启动4、进程信息的查看4.1、STAT 进程的状态:进程状态使用字符表示的(STAT的状态码),其状态码对应的含义:4.2、ps命令常用用法(方便查看系统进程&…...
【前端技巧】CSS常用知识碎片(九)
CSS常用知识碎片(九) mask-image属性 带有半透明的PNG图像的遮罩效果 .mask-image {mask: no-repeat center / contain;mask-image: url(bird.png); }SVG图形遮罩效果 .mask-image {mask-image: url("data:image/svgxml,%3Csvg viewBox0 0 3232…...
SQL 上升的温度
197 上升的温度 SQL架构 表: Weather ---------------------- | Column Name | Type | ---------------------- | id | int | | recordDate | date | | temperature | int | ---------------------- id 是这个表的主键 该表包含特定日期的温度信息 编写一个 SQL …...
Matlab实现最优化(附上多个完整仿真源码)
最优化是一种寻找最优解的数学方法,它在各个领域都有广泛的应用。在Matlab中,有多种工具箱和函数库可以用来实现最优化,下面我们来介绍一下如何用Matlab实现最优化。 1. 定义目标函数 在开始最优化之前,需要定义一个目标函数。目…...
es下载历史的tar文件
第一步进入官网找到历史版本 第二步复制历史版本名称组合成下面的链接 直接get访问下载。如下链接所示只需要修改7.3.0这个版本号 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-linux-x86_64.tar.gz...
顺畅下载chatglm2-6b的模型文件
不管是从huggingface下,git下,wget下,都可能卡。 用推荐的清华源的url下,也卡,但url转换之后的,在windows下不了。 但是在linux上就几十兆每秒 wget https://cloud.tsinghua.edu.cn/seafhttp/files/0d8b273…...
go语言 socket: too many open files 错误分析
问题背景: 近期针对老的PHP接口做了迁移重构,用golang重新实现,在上线之前,测试进行了压测,压测的量级为:200请求/s, 连续请求10s,发现接口出现大量超时错误,查看日志发现错误信息为…...
分布式搜索--elasticsearch
一、初识 elasticsearch 1. 了解 ES ① elasticsearch 是一款非常强大的开源 搜索引擎,可以帮助我们从海量数据中 快速找到需要的内容 ② elasticsearch 结合 kibana、Logstash、 Beats,也就是 elastic stack (ELK),被 广泛应用在日志数据分…...
UE5《Electric Dreams》项目PCG技术解析 之 PCGCustomNodes详解(一)
《Electric Dreams》项目中提供了一些自定义节点和子图(文件位置:“/Content/PCG/Assets/PCGCustomNodes”),这些节点和子图在《Electric Dreams》被广泛使用,对于理解《Electric Dreams》非常重要,而且它们可以直接移…...
500万PV的网站需要多少台服务器?
1. 衡量业务量的指标 衡量业务量的指标项有很多,比如,常见Web类应用中的PV、UV、IP。而比较贴近业务的指标项就是大家通常所说的业务用户数。但这个用户数比较笼统,其实和真实访问量有比较大的差距,所以为了更贴近实际业务量及压力…...
拖动排序功能的实现 - 使用HTML、CSS和JavaScript
引言 在现代Web应用程序中,拖动排序是一种常见的用户界面交互方式,它允许用户通过拖动元素来重新排列列表或项目的顺序。本文将介绍如何使用HTML、CSS和JavaScript来实现手动拖动排序功能。 一、HTML结构 首先,我们需要定义一个列表&#…...
【STM32MP135 - ST官方源码移植】第三章:OPTEE源码移植教程
STM32MP135 OPTEE源码移植教程 一、解压optee的源码压缩包二、拷贝新的设备树文件三、修改Makefile.sdk文件(1)增加stm32mp135d-atk设备树编译(2)修改编译器为arm-none-linux-gnueabihf(3)使用buildroot工具…...
云主机安全-私有密钥安全认证
场景描述 云主机凭借其性价比高、生配扩容便利、运维便捷、稳定性高等优势深受用户青睐,越来越多的企业开始租用云主机,将自己的服务器、业务系统等搭建或存储到云主机上。 用户痛点 用户租用或托管的云主机,运维端口(远程桌面&…...
《Web安全基础》02. 信息收集
web 1:CDN 绕过1.1:判断是否有 CDN 服务1.2:常见绕过方法1.3:相关资源 2:网站架构3:WAF4:APP 及其他资产5:资产监控 本系列侧重方法论,各工具只是实现目标的载体。 命令与…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
51c自动驾驶~合集58
我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留,CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制(CCA-Attention),…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信
文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
LangFlow技术架构分析
🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...
Windows 下端口占用排查与释放全攻略
Windows 下端口占用排查与释放全攻略 在开发和运维过程中,经常会遇到端口被占用的问题(如 8080、3306 等常用端口)。本文将详细介绍如何通过命令行和图形化界面快速定位并释放被占用的端口,帮助你高效解决此类问题。 一、准…...
