核心内容摘要
Job Iteration监控与指标:使用ActiveSupport::Notifications追踪任务状态
Java零基础必看1小时搞定微服务从0到1搭建springcloudnacos实战项目搞定企业刚需技术
前置准备5 分钟确保你的电脑已安装以下环境这是运行项目的基础JDK 8微服务主流版本适配配置好JAVA_HOME环境变量Maven
6用于项目依赖管理配置好MAVEN_HOMENacos Server下载地址https://github.com/alibaba/nacos/releases启动命令Windowsbin/startup.cmd -m standalone单机模式启动后访问http://localhost:8848/nacos默认账号 / 密码nacos/nacos
核心思路先搭建父工程统一管理依赖版本避免版本冲突搭建服务提供者provider提供接口供其他服务调用搭建服务消费者consumer通过 Nacos 调用提供者接口基于 Nacos 实现服务注册 / 发现和配置管理
实战编码50 分钟步骤 1创建父工程Mavenxml?xml version
0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/
4.
0 xmlns:xsihttp://www.w
org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/
4.
0 http://maven.apache.org/xsd/maven-
4.
0.
xsd modelVersion
4.
0/modelVersion !-- 父工程坐标 -- groupIdcom.example/groupId artifactIdspringcloud-nacos-demo/artifactId version
0-SNAPSHOT/version packagingpom/packaging !-- 子模块声明 -- modules modulenacos-provider/module modulenacos-consumer/module /modules !-- 依赖版本管理 -- properties maven.compiler.source8/maven.compiler.source maven.compiler.target8/maven.compiler.target spring-cloud-alibaba.version
2.
2.
RELEASE/spring-cloud-alibaba.version spring-cloud.versionHoxton.SR12/spring-cloud.version spring-boot.version
2.
3.
RELEASE/spring-boot.version /properties !-- 依赖版本锁定 -- dependencyManagement dependencies !-- Spring Boot 依赖 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-dependencies/artifactId version${spring-boot.version}/version typepom/type scopeimport/scope /dependency !-- Spring Cloud 依赖 -- dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-dependencies/artifactId version${spring-cloud.version}/version typepom/type scopeimport/scope /dependency !-- Spring Cloud Alibaba 依赖 -- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-alibaba-dependencies/artifactId version${spring-cloud-alibaba.version}/version typepom/type scopeimport/scope /dependency /dependencies /dependencyManagement /project步骤 2创建服务提供者nacos-provider
子工程 pom.xmlxml?xml version
0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/
4.
0 xmlns:xsihttp://www.w
org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/
4.
0 http://maven.apache.org/xsd/maven-
4.
0.
xsd parent groupIdcom.example/groupId artifactIdspringcloud-nacos-demo/artifactId version
0-SNAPSHOT/version /parent artifactIdnacos-provider/artifactId dependencies !-- Spring Boot Web -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- Nacos 服务注册发现 -- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId /dependency /dependencies /project
配置文件application.ymlyamlserver: port: 8081 # 提供者端口 spring: application: name: nacos-provider # 服务名称核心Nacos通过这个名称识别服务 cloud: nacos: discovery: server-addr: localhost:8848 # Nacos服务地址
启动类 业务接口java运行package com.example.provider; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; // 开启服务注册发现Nacos EnableDiscoveryClient SpringBootApplication public class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); } // 业务接口模拟提供数据服务 RestController class ProviderController { // 接口路径/hello/{name} GetMapping(/hello/{name}) public String hello(PathVariable String name) { return Hello name ! 我是Nacos服务提供者; } } }步骤 3创建服务消费者nacos-consumer
子工程 pom.xmlxml?xml version
0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/
4.
0 xmlns:xsihttp://www.w
org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/
4.
0 http://maven.apache.org/xsd/maven-
4.
0.
xsd parent groupIdcom.example/groupId artifactIdspringcloud-nacos-demo/artifactId version
0-SNAPSHOT/version /parent artifactIdnacos-consumer/artifactId dependencies !-- Spring Boot Web -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- Nacos 服务注册发现 -- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId /dependency !-- RestTemplate用于远程调用 -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-webflux/artifactId /dependency /dependencies /project
配置文件application.ymlyamlserver: port: 8082 # 消费者端口 spring: application: name: nacos-consumer # 消费者服务名称 cloud: nacos: discovery: server-addr: localhost:8848 # Nacos服务地址
启动类 调用逻辑package com.example.consumer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; // 开启服务注册发现 EnableDiscoveryClient SpringBootApplication public class ConsumerApplication { public static void main(String[] args) { SpringApplication.run(ConsumerApplication.class, args); } // 配置RestTemplate开启负载均衡LoadBalanced Bean LoadBalanced public RestTemplate restTemplate() { return new RestTemplate(); } // 消费者接口调用提供者服务 RestController class ConsumerController { // 注入RestTemplate private final RestTemplate restTemplate; // 构造器注入 public ConsumerController(RestTemplate restTemplate) { this.restTemplate restTemplate; } // 接口路径/consumer/hello/{name} GetMapping(/consumer/hello/{name}) public String hello(PathVariable String name) { // 调用提供者服务使用服务名称nacos-provider代替IP端口实现服务发现 String url http://nacos-provider/hello/ name; return restTemplate.getForObject(url, String.class); } } }
测试验证5 分钟启动 Nacos Server确保 8848 端口正常启动nacos-provider8081 端口启动nacos-consumer8082 端口访问 Nacos 控制台http://localhost:8848/nacos在「服务管理」→「服务列表」中能看到nacos-provider和nacos-consumer两个服务测试接口访问http://localhost:8082/consumer/hello/Java微服务返回结果Hello Java微服务! 我是Nacos服务提供者说明调用成功。
总结核心依赖Spring Cloud Alibaba Nacos Discovery 实现服务注册与发现RestTemplate 实现服务间远程调用。
关键配置每个微服务需配置spring.application.name服务名和spring.cloud.nacos.discovery.server-addrNacos 地址且启动类需加EnableDiscoveryClient。
核心逻辑消费者通过服务名而非硬编码 IP调用提供者接口由 Nacos 自动发现服务地址实现微服务解耦。
这个实战项目覆盖了企业微服务开发的核心刚需服务注册发现、跨服务调用是 Spring Cloud Nacos 的最小可用模型后续可扩展配置中心、熔断降级、网关等企业级特性。