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

JavaWeb_SpringCloud微服务_Day1-eureka, ribbon, nacos

JavaWeb_SpringCloud微服务_Day1-eureka, ribbon, nacos

  • 认识微服务
    • 微服务技术对比
  • 分布式服务架构案例
    • 远程调用
  • eureka注册中心
    • 原理
    • 搭建EurekaServer
    • 服务注册
    • 服务发现
  • Ribbon负载均衡
    • 修改负载均衡
    • 饥饿加载
  • nacos注册中心
    • 快速入门
    • eureka和nacos对比
  • 来源

认识微服务

微服务技术对比

DubboSpringCloudSpringCloudAlibaba
注册中心zookeeper, RedisEureka, ConsulNacos, Eureka
服务远程调用Dubbo协议Feign(http协议)Dubbo, Feign
配置中心SpringCloudConfigSpringCloudConfig, Nacos
服务网关SpringCloudGateway, ZuulSpringCloudGateway, Zuul
服务监控和保护dubbo-admin, 功能弱HystrixSentinel

分布式服务架构案例

远程调用

  1. 注册RestTemplate
    /*** 创建RestTemplate并注入Spring容器* @return*/
    @Bean
    public RestTemplate restTemplate(){return new RestTemplate();
    }
    
  2. 服务远程调用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拉取服务列表
      • 基于服务列表做负载均衡, 选中一个微服务后发起远程调用

搭建EurekaServer

  1. 引入eureka-server依赖
    <!-- eureka服务端 -->
    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    
  2. 添加@EnableEurekaServer注解
    @EnableEurekaServer
    @SpringBootApplication
    public class EurekaApplication {public static void main(String[] args) {SpringApplication.run(EurekaApplication.class, args);}
    }
    
  3. 在application.yml中配置eureka地址
    server:port: 10086
    spring:application:name: eurekaserver
    eureka:client:service-url:defaultZone: http://127.0.0.1:10086/eureka/
    

服务注册

  1. 引入eureka-client依赖
    <!-- eureka客户端 -->
    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
  2. 在application.yml中配置eureka地址
  3. 启动多个实例: 右键服务copy configuration, 在启动项vm option中修改端口号

服务发现

  1. 给RestTemplate添加@LoadBalanced注解, 负载均衡
    @LoadBalanced
    public RestTemplate restTemplate(){return new RestTemplate();
    }
    
  2. 用服务提供者的服务名称远程调用
    // String url = "http://localhost:8081/user/"+order.getUserId();
    String url = "http://userserver/user/"+order.getUserId();
    

Ribbon负载均衡

修改负载均衡

  1. 代码方式 (全体)
    /*** 更换负载均衡策略为随机* @return*/
    @Bean
    public IRule randomRule()
    {return new RandomRule();
    }
    ```erer
    
  2. 配置文件方式 (只针对某个微服务)
    userserver: # 给某个微服务配置负载均衡规则,这里是userserver服务ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则 
    

饥饿加载

  • Ribbon默认是采用懒加载, 即第一次访问时才会创建LoadBalanceClient, 请求时间很长.
  • 饥饿加载在项目启动时创建, 降低第一次访问的耗时
    ribbon:eager-load: # 饥饿加载enabled: trueclients: userserver # 指定服务
    

nacos注册中心

快速入门

  1. 父工程添加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>
    
  2. nacos客户端依赖
    <!-- nacos客户端依赖 -->
    <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>
    
  3. 配置文件
    spring:cloud:nacos:server-addr: localhost:8848 # nacos服务地址
    
  4. 集群配置
    spring:cloud:nacos:server-addr: localhost:8848 # nacos服务地址discovery:cluster-name: SH # 集群地址
    
  5. NacosRule负载均衡策略
    userserver: # 给某个微服务配置负载均衡规则,这里是userservice服务ribbon:# NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
    
    • 优先选择同集群服务实例列表
    • 本地集群找不到提供者, 才去其他集群寻找, 并且会报警告
    • 确定了可用实例列表后, 再采用随机负载均衡挑选实例
  6. 命名空间
    spring:cloud:nacos:discovery:namespace: xxx # 命令空间
    
    • namespace用来做环境隔离
    • 每个namespace都有唯一id
    • 不同namespace下的服务不可见

eureka和nacos对比

  1. nacos非临时实例
    spring:cloud:nacos:discovery:ephemeral: false # 设置为非临时实例
    
  2. nacos与eureka的共同点
    • 都支持服务注册和服务拉取
    • 都支持服务提供者心跳方式做健康检测
  3. 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 ”&#xff0c;这是一个计量经济学术语&#xff0c;用于表示多维结构化数据集和 “ Python 数据分析”。众所周知&#xff0c;清理和转换数据在数据分析中非常重要&#xff0c;Pandas 提供了丰富的数据结构和功能&#xff0c;使数据处…...

【Android关键字】startActivityForResult/onActivityResult/setResult方法的使用

最近在写一个安卓程序&#xff0c;在程序里需要用到startActivityForResult这个Intent操作关键字&#xff0c;与该关键字有关的还有onActivityResult和setResult。这里对其用法进行一个总结。 三者在API中的形式 //startActivityForResult与startActivity类似&#xff0c;只不…...

PyTorch深度学习实战(5)——计算机视觉

PyTorch深度学习实战&#xff08;5&#xff09;——计算机视觉 0. 前言1. 图像表示2. 将图像转换为结构化数组2.1 灰度图像表示2.2 彩色图像表示 3 利用神经网络进行图像分析的优势小结系列链接 0. 前言 计算机视觉是指通过计算机系统对图像和视频进行处理和分析&#xff0c;利…...

遥感目标检测(1)--R3Det

目录 一、概述 二、三个挑战 三、网络架构​编辑 1、旋转RetinaNet 2、精细化旋转RetinaNet 3、与RoIAlign&#xff08;感兴趣区域插值&#xff09;进行比较 4、消融实验与对比实验 一、概述 R3Det论文中提到一个端到端的精细化的单级旋转检测器&#xff0c;通过从粗到细…...

使用 vue3-tel-input电话组件时,为什么通过v-model绑定的默认值无效而 通过:value绑定有效?

问题&#xff1a; 使用第三方 vue3-tel-input电话组件时&#xff0c;通过v-model绑定具有初始值的电话变量&#xff0c;但input框内显示的初始值为空&#xff1f; 排查过程&#xff1a; 将 v-model绑定改为 :value绑定后&#xff0c;电话变量初始值竟然能够显示在vue3-tel-inp…...

【运维工程师学习二】OS系统管理

【运维工程师学习二】OS系统管理 1、操作系统管理2、进程管理3、进程的启动4、进程信息的查看4.1、STAT 进程的状态&#xff1a;进程状态使用字符表示的&#xff08;STAT的状态码&#xff09;,其状态码对应的含义&#xff1a;4.2、ps命令常用用法&#xff08;方便查看系统进程&…...

【前端技巧】CSS常用知识碎片(九)

CSS常用知识碎片&#xff08;九&#xff09; 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架构 表&#xff1a; Weather ---------------------- | Column Name | Type | ---------------------- | id | int | | recordDate | date | | temperature | int | ---------------------- id 是这个表的主键 该表包含特定日期的温度信息 编写一个 SQL …...

Matlab实现最优化(附上多个完整仿真源码)

最优化是一种寻找最优解的数学方法&#xff0c;它在各个领域都有广泛的应用。在Matlab中&#xff0c;有多种工具箱和函数库可以用来实现最优化&#xff0c;下面我们来介绍一下如何用Matlab实现最优化。 1. 定义目标函数 在开始最优化之前&#xff0c;需要定义一个目标函数。目…...

es下载历史的tar文件

第一步进入官网找到历史版本 第二步复制历史版本名称组合成下面的链接 直接get访问下载。如下链接所示只需要修改7.3.0这个版本号 https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.0-linux-x86_64.tar.gz...

顺畅下载chatglm2-6b的模型文件

不管是从huggingface下&#xff0c;git下&#xff0c;wget下&#xff0c;都可能卡。 用推荐的清华源的url下&#xff0c;也卡&#xff0c;但url转换之后的&#xff0c;在windows下不了。 但是在linux上就几十兆每秒 wget https://cloud.tsinghua.edu.cn/seafhttp/files/0d8b273…...

go语言 socket: too many open files 错误分析

问题背景&#xff1a; 近期针对老的PHP接口做了迁移重构&#xff0c;用golang重新实现&#xff0c;在上线之前&#xff0c;测试进行了压测&#xff0c;压测的量级为&#xff1a;200请求/s, 连续请求10s&#xff0c;发现接口出现大量超时错误&#xff0c;查看日志发现错误信息为…...

分布式搜索--elasticsearch

一、初识 elasticsearch 1. 了解 ES ① elasticsearch 是一款非常强大的开源 搜索引擎&#xff0c;可以帮助我们从海量数据中 快速找到需要的内容 ② elasticsearch 结合 kibana、Logstash、 Beats&#xff0c;也就是 elastic stack (ELK)&#xff0c;被 广泛应用在日志数据分…...

UE5《Electric Dreams》项目PCG技术解析 之 PCGCustomNodes详解(一)

《Electric Dreams》项目中提供了一些自定义节点和子图&#xff08;文件位置:“/Content/PCG/Assets/PCGCustomNodes”&#xff09;&#xff0c;这些节点和子图在《Electric Dreams》被广泛使用&#xff0c;对于理解《Electric Dreams》非常重要&#xff0c;而且它们可以直接移…...

500万PV的网站需要多少台服务器?

1. 衡量业务量的指标 衡量业务量的指标项有很多&#xff0c;比如&#xff0c;常见Web类应用中的PV、UV、IP。而比较贴近业务的指标项就是大家通常所说的业务用户数。但这个用户数比较笼统&#xff0c;其实和真实访问量有比较大的差距&#xff0c;所以为了更贴近实际业务量及压力…...

拖动排序功能的实现 - 使用HTML、CSS和JavaScript

引言 在现代Web应用程序中&#xff0c;拖动排序是一种常见的用户界面交互方式&#xff0c;它允许用户通过拖动元素来重新排列列表或项目的顺序。本文将介绍如何使用HTML、CSS和JavaScript来实现手动拖动排序功能。 一、HTML结构 首先&#xff0c;我们需要定义一个列表&#…...

【STM32MP135 - ST官方源码移植】第三章:OPTEE源码移植教程

STM32MP135 OPTEE源码移植教程 一、解压optee的源码压缩包二、拷贝新的设备树文件三、修改Makefile.sdk文件&#xff08;1&#xff09;增加stm32mp135d-atk设备树编译&#xff08;2&#xff09;修改编译器为arm-none-linux-gnueabihf&#xff08;3&#xff09;使用buildroot工具…...

云主机安全-私有密钥安全认证

场景描述 云主机凭借其性价比高、生配扩容便利、运维便捷、稳定性高等优势深受用户青睐&#xff0c;越来越多的企业开始租用云主机&#xff0c;将自己的服务器、业务系统等搭建或存储到云主机上。 用户痛点 用户租用或托管的云主机&#xff0c;运维端口&#xff08;远程桌面&…...

《Web安全基础》02. 信息收集

web 1&#xff1a;CDN 绕过1.1&#xff1a;判断是否有 CDN 服务1.2&#xff1a;常见绕过方法1.3&#xff1a;相关资源 2&#xff1a;网站架构3&#xff1a;WAF4&#xff1a;APP 及其他资产5&#xff1a;资产监控 本系列侧重方法论&#xff0c;各工具只是实现目标的载体。 命令与…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

【C语言练习】080. 使用C语言实现简单的数据库操作

080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

稳定币的深度剖析与展望

一、引言 在当今数字化浪潮席卷全球的时代&#xff0c;加密货币作为一种新兴的金融现象&#xff0c;正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而&#xff0c;加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下&#xff0c;稳定…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

【7色560页】职场可视化逻辑图高级数据分析PPT模版

7种色调职场工作汇报PPT&#xff0c;橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版&#xff1a;职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...

android RelativeLayout布局

<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...