当前位置: 首页 > 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;各工具只是实现目标的载体。 命令与…...

R语言AI模型部署方案:精准离线运行详解

R语言AI模型部署方案:精准离线运行详解 一、项目概述 本文将构建一个完整的R语言AI部署解决方案,实现鸢尾花分类模型的训练、保存、离线部署和预测功能。核心特点: 100%离线运行能力自包含环境依赖生产级错误处理跨平台兼容性模型版本管理# 文件结构说明 Iris_AI_Deployme…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

C++八股 —— 单例模式

文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全&#xff08;Thread Safety&#xff09; 线程安全是指在多线程环境下&#xff0c;某个函数、类或代码片段能够被多个线程同时调用时&#xff0c;仍能保证数据的一致性和逻辑的正确性&#xf…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

网站指纹识别

网站指纹识别 网站的最基本组成&#xff1a;服务器&#xff08;操作系统&#xff09;、中间件&#xff08;web容器&#xff09;、脚本语言、数据厍 为什么要了解这些&#xff1f;举个例子&#xff1a;发现了一个文件读取漏洞&#xff0c;我们需要读/etc/passwd&#xff0c;如…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

return this;返回的是谁

一个审批系统的示例来演示责任链模式的实现。假设公司需要处理不同金额的采购申请&#xff0c;不同级别的经理有不同的审批权限&#xff1a; // 抽象处理者&#xff1a;审批者 abstract class Approver {protected Approver successor; // 下一个处理者// 设置下一个处理者pub…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述&#xff1a;海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而&#xff0c;目前该领域仍面临一个挑战&#xff0c;即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...