微服务服务注册与发现

简介: 项目采用微服务架构,便于扩展与团队协作,基于Spring Cloud Alibaba构建,使用Nacos、OpenFeign、Sentinel等组件,实现服务注册发现与远程调用,提升系统稳定性与可维护性。

你们的项目为什么要用微服务架构?

可从几个方面回答:

  1. 我们这个项目在立项时就规划了几个版本,考虑项目的规模比较大,为了方便后期项目的扩展和维护,以及方便团队协作等方面使用了微服务架构。
  2. 我们公司有一个架构组,他们负责对系统架构进行选型、封装等工作,我们项目的系统架构是由架构组的同事提供好的。

SpringBoot和SpringCloud,请你谈谈对他们的理解?

1)、SpringBoot是一个快速构建工程的框架,基于自动装配去实现,可以快速向项目中加入依赖的组件。

2)、SpringCloud是关注微服务开发,协调、治理的框架,它将SpringBoot开发的单体整合并管理起来。SpringCloud常用组件:网关、注册中心、配置中心、feign、熔断降级。

3)、SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖关系。

Spring Cloud Alibaba与Spring Cloud区别和联系?

联系:

  • 两者都是基于 Spring Boot 的微服务框架。
  • Spring Cloud Alibaba 遵循 Spring Cloud 的规范。
  • Spring Cloud Alibaba 的组件可以与 Spring Cloud 的其他组件配合使用。

区别:

  • 服务发现:Spring Cloud 使用的是 Netflix Eureka,而 Spring Cloud Alibaba 使用的是 Nacos。
  • 断路器:Spring Cloud 原生支持 Hystrix,而 Spring Cloud Alibaba 推荐使用 Sentinel。
  • 配置管理:Spring Cloud 使用 Spring Cloud Config Server,而 Spring Cloud Alibaba 使用 Nacos 作为配置中心。
  • 负载均衡:Spring Cloud LoadBalancer结合 Nacos实现负载均衡。
  • 远程调用支持:Spring Cloud Alibaba 支持 Dubbo 作为 RPC 调用框架和Feign方式,Spring Cloud 默认不包含

你们Spring Cloud用的什么版本?

我们项目用的Spring Cloud 2021版以及Spring Boot 2.7.12版本,具体使用Spring Cloud Alibaba框架,具体使用了Nacos配置中心与注册中心、Spring Cloud Gateway网关、Spring Cloud LoadBalancer负载均衡、OpenFeign远程调用、Sentinel熔断降级限流等组件。

说几个Java远程调用的技术?你们项目用的什么技术?

在Java中实现RPC远程调用的技术有很多,常用的有:

  1. 使用RestTemplate调用RESTful 接口。
  2. 使用Java提供RMI技术。
  3. 使用Dubbo技术。
  4. 在微服务中我们用Feign或OpenFeign实现远程调用。

我们项目用的RestTemplate、OpenFeign实现微服务之间的远程调用。

如何使用nginx实现负载均衡?

  1. nginx.conf 配置文件(/etc/nginx/nginx.conf)中配置upstream
  2. 在upstream 配置一组后端服务节点地址,并可以指定负载均衡的权重。
  3. server 块内,你可以在需要负载均衡的 location 中使用 proxy_pass 指令指向前面定义的 upstream
  4. 当请求该虚拟目录,通过upstream 实现负载均衡。

Nginx是反向代理,为什么叫反向代理?

Nginx 作为反向代理服务器,其“反向”的概念主要体现在代理的方向上。传统的代理服务器(正向代理)是通过代理服务器访问外网服务器,而“反向”代理表示方向正好相反,是外网通过Nginx返回内部服务器。

说一下服务注册与发现流程?

服务注册与发现流程包括三个角色:服务注册中心、服务提供者、服务调用者。

三者的分工如下:

注册中心:提供服务注册接口,接收服务注册请求,保存服务实例的信息。我们项目用的Nacos。

服务提供者:服务接口提供方,请求注册中心将服务信息注册到注册中心。

服务调用者:远程调用的客户端,请求注册中心查询服务地址,通过负载均衡选取目标服务地址进行远程调用。

服务注册与发现流程如下:

  • 服务启动时就会注册自己的服务信息(服务名、IP、端口)到注册中心
  • 调用者可以从注册中心订阅想要的服务,获取服务对应的实例列表(1个服务可能多实例部署)
  • 调用者作为客户端自己通过负载均衡算法挑选一个服务提供者实例进行远程调用,即客户端负载均衡
  • 调用者向该实例发起远程调用

微服务是怎么实现远程调用的?

首先使用Nacos实现服务注册中心,服务提供方将自己注册到服务注册中心,服务调用方通过客户端负载均衡器从服务注册中心选取一个目标服务地址进行远程调用。

客户端负载均衡器早期用的Ribbon,现在使用的是Spring Cloud Loadbalancer。

具体使用的有两种方式:

  1. 一种是通过@LoadBalanced注解标识RestTemplate,使用RestTemplate进行远程调用。
  2. 另一种是使用OpenFeign进行远程调用。

我们项目主要用的是OpenFeign。

OpenFeign的工作原理?

OpenFeign是一个微服务之间调用的Http客户端,它集成了负载均衡组件自动将请求发到不同的服务实例,它是一个http通信模板,底层使用第三方框架OkHttp发送http请求并获取响应结果, 整个请求的过程实现了RPC远程方法调用,将请求和响应自动封装为Java 对象。

它的使用流程:

  1. 接口定义:开发者通过定义Java接口来描述服务间的通信协议,包括URL、请求方法、请求参数等。
  2. 代理生成:在应用启动时,Feign接口会生成代理对象。
  3. 请求发送:当调用代理对象的方法时,Feign会根据方法的注解和参数生成HTTP请求,并发送给目标服务。Feign的底层使用的是第三方的OkHttp框架发起http请求。
  4. 负载均衡:OpenFeign集成了负载均衡组件(如Ribbon或Spring Cloud Loadbalancer),可以自动将请求发到不同的服务实例。
  5. 响应处理:目标服务处理完请求后,将响应返回给Feign客户端。
  6. 结果解析:OpenFeign会根据接口定义和注解,将HTTP响应解析为Java对象,并返回给调用者。
相关文章
|
机器学习/深度学习 小程序 前端开发
微信小程序——实现对话模式(调用大模型图片生成)
微信小程序——实现对话模式(调用大模型图片生成)
1278 3
|
4月前
|
人工智能 Linux API
【OpenClaw保姆级图文教程】阿里云/本地部署、免费大模型配置、Skills接入与常见问题解答
2026年初,开源AI智能体框架OpenClaw(昵称“小龙虾”)在GitHub平台实现指数级增长,短短数周斩获15万+星标,成为全球增速最快的AI开源项目之一。这款工具打破了传统AI的被动交互壁垒,实现7×24小时无间断自主运行,能自主操控浏览器、编写调试代码、解析各类文件、执行系统命令,即使用户休息,也能按预设目标完成全流程任务。开发者EthanMoore更是凭借OpenClaw在30天内实现月均被动收入突破1.2万美元,印证了这款工具的自动化生产力价值。
1635 4
|
7月前
|
SQL Java 数据库连接
持久层框架MyBatisPlus
本课程系统讲解MyBatis-Plus(MP)的核心功能与实战应用,涵盖快速入门、条件构造器、Service接口、代码生成、分页插件等常用功能,结合Spring Boot实现CRUD操作与复杂查询,提升开发效率。
持久层框架MyBatisPlus
|
8月前
|
Kubernetes Cloud Native Nacos
nacos3.0
Nacos 3.0实现从配置中心到云原生控制面的跃迁,通过引入JRaft提升集群性能与稳定性,支持gRPC和xDS协议,打通服务网格生态,构建统一、可扩展的多集群服务治理平台,成为云原生基础设施的核心控制中枢。
|
7月前
|
负载均衡 Java 数据安全/隐私保护
Gateway服务网关
网关是微服务架构的统一入口,核心功能包括请求路由、权限控制和限流。通过Spring Cloud Gateway可实现高效路由转发与过滤器处理,支持跨域配置,提升系统安全性和稳定性。
|
11月前
|
存储 弹性计算 容灾
新手小白如何购买阿里云服务器?2025最新图文流程
本文详细介绍阿里云ECS服务器自定义购买全流程,涵盖付费模式、地域、网络、实例规格、镜像、存储、公网IP、带宽、安全组等配置选择,帮助用户全面了解如何根据需求选购阿里云服务器。
2582 2
|
11月前
|
Ubuntu 安全 Linux
CentOS与Ubuntu的深度对比与分析
Ubuntu更新频繁、文档丰富,适用于云服务与容器部署。 与CentOS的比较,Ubuntu基于Debian,而CentOS则源自RHEL。在软件包格式上,Ubuntu采用.deb和.snap,而CentOS则使用.rpm和flatpak。更新方面,Ubuntu使用apt,而CentOS则依赖yum。尽管CentOS以稳定性见长,不常对包进行更新,但这并不意味着Ubuntu在安全性上逊色。事实上,Ubuntu提供了更为丰富的文档和免费的技术支持。此外,Ubuntu的服务器版本在云服务和容器部署方面拥有更多的优势。
|
7月前
|
canal 缓存 关系型数据库
微服务阶段原理篇
本文介绍了电商系统中ES索引与MySQL数据同步的解决方案,重点阐述了基于Canal和MQ的异步同步机制。通过解析MySQL的binlog日志,Canal实现数据变更的实时捕获,并结合RabbitMQ保证消息顺序性,最终实现Elasticsearch索引的高效更新。该方案解耦了业务逻辑与索引维护,提升了系统性能与一致性。
 微服务阶段原理篇
|
7月前
|
存储 JSON NoSQL
MongoDB常用命令
本文介绍了MongoDB常用操作命令,涵盖数据库与集合的创建、查看、删除,以及文档的增删改查、条件查询、投影、排序、分页和统计等功能,结合实例详细讲解了语法格式及使用注意事项,适用于初学者快速掌握MongoDB基本操作。
MongoDB常用命令
|
9月前
|
机器学习/深度学习 人工智能 算法
拔俗AI智能营运分析助手:用技术破解企业“数据焦虑”
AI智能营运分析助手破解企业“数据多却难洞察”难题,通过自动化集成、定制化模型、可视化输出,助力中小企业实现低门槛数据驱动决策,提升营运效率与精准度。
810 0

热门文章

最新文章