ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Java框架 SpringCloud 快速入门: 从服务拆分到注册中心的落地路线

Java框架 SpringCloud 快速入门: 从服务拆分到注册中心的落地路线 概述上篇把地图铺好了——微服务是什么、拆完会冒出哪些新问题、SpringCloud 里各组件各管哪一段。今天不再停在概念层直接把示例工程cloud-demo拆开、把服务连起来一天走完服务拆分 → Eureka → Ribbon → Nacos 四站。纲要今天的范围边界只讲服务怎么拆、怎么调、地址从哪来、多实例怎么选网关、Feign、配置管理留给明天四个站点的先后顺序以及每一步是被什么问题逼出来的每站学完能做什么关键注解、关键类、该去哪个控制台看效果全天共用的示例工程cloud-demo的演进结构以及基线版与终态版的差别动手优先级哪些必须亲手跑通哪些可以先看懂再动手与《微服务框架课程介绍》的分工那篇是全模块总纲本篇只划今天的范围今天只走一条线模块总纲把 Eureka、Nacos、Feign、Gateway、配置管理全列了一遍那是十几篇的活。今天动到的只是前半段按讲义顺序正好四块服务拆分与远程调用——把单体拆成user-service和order-service让订单服务通过 HTTP 去取用户数据Eureka 注册中心——服务地址不再写死在配置文件里Ribbon 负载均衡——有了多个实例之后请求该落到哪一个Nacos 注册中心——阿里系的注册中心以及它和 Eureka 到底差在哪第二天才进 Gateway、Feign、Nacos 配置管理。先把这条边界记牢今天就不会被还有一堆组件没学的焦虑带偏——今天这四块本身就是一条完整的因果链缺任何一环后面的都接不上。顺序不是排的是被问题逼出来的这四站的顺序不能打乱也不是老师按目录随手排的。每一站都是上一站暴露出来的问题逼出来的渲染错误:Mermaid 渲染失败: Parse error on line 6: ...多个实例该选哪一个] E --|LoadBalanced 底层其实走 ----------------------^ Expecting AMP, COLON, PIPE, TESTSTR, DOWN, DEFAULT, NUM, COMMA, NODE_STRING, BRKT, MINUS, MULT, UNICODE_TEXT, got LINK_ID拆开讲每一步为什么会引出下一步先拆才知道调用会变成网络请求。单体时代orderService.queryOrderById()里直接 new 一个 User 就完了拆完之后订单库里没有用户表数据在另一个进程、另一个库里只能调对方暴露的 Restful 接口。这一步用的是 Spring 自带的RestTemplate把http://localhost:8081/user/{id}拼出来发出去。跑通一次就会发现调用真的变成了一次可能超时、可能失败、要处理 JSON 的网络请求。RestTemplate 一落地地址硬编码的问题立刻现形。URL 里localhost:8081是写死的用户服务换台机器、加个实例、改个端口订单服务就得改配置重新发版而且订单服务压根不知道用户服务到底有几个实例、还活着没有。这三个问题——地址怎么来、多实例怎么选、实例健康与否——单靠RestTemplate解决不了注册中心就是为它们准备的。Eureka 里对应三个动作服务注册、服务拉取、心跳。注册中心一上多实例的选择问题就被推到了台前。你把用户服务启动两份8081、8082Eureka 里能看到两个实例但订单服务拉到列表之后总得挑一个。这个挑的动作在讲义里只用了一个LoadBalanced注解就完成了背后的执行者就是 Ribbon。所以 Ribbon 不是可学可不学的加分项它是 Eureka 服务发现的默认配套。从 Eureka 换到 Nacos本质是同一个岗位换代。Eureka 归 Netflix1.x 之后基本停止演进Nacos 出自阿里同样做注册中心却多了服务分级存储按机房分集群、实例权重、namespace环境隔离健康检测也不再只是被动等心跳。它俩结构相似、用法几乎一样讲义把它们放在一起对比是因为面试和实际选型都必须答得出为什么国内项目多数用 Nacos。每站学完手里多什么站点解决的问题关键注解 / 类该去哪个控制台看服务拆分与远程调用服务间不能直连数据库只能走 Restful 接口取数RestTemplate、Bean、MapperScan浏览器访问http://localhost:8081/user/1Eureka 注册中心地址硬编码、实例列表与健康状态不可知EnableEurekaServer、LoadBalanced、EurekaClienthttp://127.0.0.1:10086Ribbon 负载均衡拿到多个实例后按算法挑一个IRule、ZoneAvoidanceRule、NFLoadBalancerRuleClassName请求两次看日志里打出的端口在 8081 / 8082 之间轮换Nacos 注册中心更主动的健康检测、分级集群、权重与环境隔离NacosRule、discovery.cluster-name、discovery.namespace、ephemeralhttp://localhost:8848/nacosEureka 和 Nacos 的差别落到配置上就三行地址从eureka.client.service-url.defaultZone换成spring.cloud.nacos.server-addr注册规则可以从ZoneAvoidanceRule换成com.alibaba.cloud.nacos.ribbon.NacosRule再加一行ephemeral: false就能把实例改成非临时实例宕机也不剔除。全天共用一个工程这四块不是各写一个 demo而是围绕同一个cloud-demo反复改造。第一站拆出两个服务第二站加一个注册中心服务端第三站改一个注解加一段配置第四站换依赖、换地址cloud-demo/ ├── pom.xml # 父工程统一管理 SpringCloud / SpringBoot / MyBatis 版本 ├── user-service/ # 用户服务端口 8081提供 Restful 接口 │ └── src/main/ │ ├── java/cn/itcast/user/{UserApplication,mapper,pojo,service,web} │ └── resources/application.yml ├── order-service/ # 订单服务基线 8080、接入注册中心后 8088 │ └── src/main/ │ ├── java/cn/itcast/order/{OrderApplication,mapper,pojo,service,web} │ └── resources/application.yml ├── eureka-server/ # 第二站新增注册中心服务端端口 10086 │ └── src/main/java/cn/itcast/eureka/EurekaApplication.java ├── feign-api/ # 后置章节Feign 客户端与公共 pojo 抽成独立模块 └── gateway/ # 后置章节网关外部请求的统一入口有个容易踩的坑课前的资料/cloud-demo是基线版——order-service的RestTemplate里还写着http://localhost:8081两个 yml 里都没有任何 eureka / nacos 配置。而代码/cloud-demo是终态版yml 里已经是 Nacos 的地址。跟着讲义敲的时候某一节的配置要以讲义当节给的为准别直接抄终态文件否则你会发现我还没学到 Nacos配置里怎么就有 Nacos 了。动手优先级时间有限的话按这个顺序用手必须先亲手跑通的三块服务拆分与远程调用。这是后面所有内容的载体。不亲手感受一次本地方法调用变成了可能失败的 HTTP 请求后面每个组件都像在解决一个不存在的问题。Eureka 的注册与发现。把两个服务注册上去在 10086 页面上看到实例列表再把RestTemplate的地址从 IP 换成服务名http://userservice/user/{id}——这一改就是服务发现这四个字的全部含义。Ribbon 的策略改配与饥饿加载。把userservice.ribbon.NFLoadBalancerRuleClassName改成RandomRule看请求还轮不轮询再打开ribbon.eager-load观察第一次请求的耗时变化。可以先看懂、晚点再动手的Nacos 环境隔离与集群搭建。namespace的坑比较多namespace 不一致会直接报找不到服务集群搭建偏运维本地单机跑通注册流程就够了。Nacos 与 Eureka 的对比。这更像面试题动手环节不深重点是能说清 AP / CP、临时实例与非临时实例、心跳检测与主动检测的区别。下一篇今天结束手上就该有一个两个服务 一个注册中心 能按服务名互相调用的可运行工程。下一篇从最底层补概念认识微服务与服务架构演变——单体架构、分布式架构、微服务三者的定义与取舍以及为什么说微服务是一种经过良好架构设计的分布式架构方案。今天先把工程跑起来概念那块到时候对号入座会轻松很多。官方文档Spring Cloud 官网Nacos 官网Eureka GitHub总结今天的价值不在于记住四个组件的名字而在于看懂它们之间问题 → 技术的递进拆服务逼出远程调用远程调用逼出注册中心注册中心逼出负载均衡Eureka 的停更逼出 Nacos。这条链条记牢了明天再学 Feign 和 Gateway 时你就能自己判断它们分别插在哪一环而不是当成新的孤立知识点重背一遍。工程上只有一件事要盯住cloud-demo全天在长大每学一门技术它就变一次边学边跑比最后统一补代码省事得多。端口口径别混——注册中心 10086、用户服务 8081、订单服务基线 8080 接入后 8088、Nacos 默认 8848。
返回列表