手把手教你Spring Cloud Alibaba(一) 集成 Nacos 、Dubbo构建项目
一、背景与项目说明用Dubbo构建项目的微服务好处就是底层的服务可以集中在一块上层代码消费者Consumer直接像使用本地代码一样使用服务。我们用Nacos作为服务的注册与发现, 方便管理与调用。我们用最简单的项目来说明这个问题项目有三个子模块api提供服务与领域实体。 在真正的项目中做好领域数据的集中管理与划分是衡量一个架构师的其中一个方面provider真正服务的实现者通过注解DubboService提供对外的微服务组件的提供者providerconsumer服务的使用者通过注解DubboReference就要调用本地服务一样方便。本项目我们采用的技术栈如下JDK 17Spring Boot 3.X相应的Spring Cloud AlibabaNacos 服务 2.X 版本其默认端口是 8848。注Nacos 3.X已经发表但端口与其他使用上略有些不同借助 AI 的提示词JDK版本17Spring Cloud Alibaba 集成 Nacos 、构建一个最简单的Dubbo 服务项目共有三个字模块api、provider consumer。二、模块与代码构成父模块取名为dubbo-demo(实际开发中其实就是你的正式项目)统一管理版本控制与常用依赖。 其pom.xml:?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd modelVersion4.0.0/modelVersion groupIdcom.example/groupId artifactIddubbo-demo/artifactId version1.0-SNAPSHOT/version modules moduleapi/module moduleprovider/module moduleconsumer/module /modules packagingpom/packaging !-- 版本管理 -- properties spring.boot.version2.7.18/spring.boot.version spring.cloud.alibaba.version2021.0.5.0/spring.cloud.alibaba.version lombok.version1.18.28/lombok.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 Alibaba 依赖管理 -- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-alibaba-dependencies/artifactId version${spring.cloud.alibaba.version}/version typepom/type scopeimport/scope /dependency !-- Lombok -- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId version${lombok.version}/version optionaltrue/optional /dependency /dependencies /dependencyManagement !-- 公共依赖 -- dependencies !-- Lombok编译时注解 -- dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId optionaltrue/optional /dependency /dependencies build plugins plugin groupIdorg.springframework.boot/groupId artifactIdspring-boot-maven-plugin/artifactId version${spring.boot.version}/version /plugin /plugins /build /projectapi模块project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd parent artifactIddubbo-demo/artifactId groupIdcom.example/groupId version1.0-SNAPSHOT/version /parent modelVersion4.0.0/modelVersion artifactIdapi/artifactId /project服务接口类packagecom.example.service;publicinterfaceHelloService{StringsayHello(Stringname);}provider 模块?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd parent artifactIddubbo-demo/artifactId groupIdcom.example/groupId version1.0-SNAPSHOT/version /parent modelVersion4.0.0/modelVersion artifactIdprovider/artifactId dependencies !-- 服务接口模块 -- dependency groupIdcom.example/groupId artifactIdapi/artifactId version1.0-SNAPSHOT/version /dependency !-- Spring Boot Web -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- Spring Cloud Alibaba Nacos 服务发现 -- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId /dependency !-- Spring Cloud Dubbo -- dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-spring-boot-starter/artifactId version3.2.11/version /dependency dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-actuator/artifactId /dependency /dependencies /projectSpring配置server: port: 8081 spring: application: name: dubbo-provider cloud: nacos: discovery: server-addr: 127.0.0.1:8848 dubbo: scan: base-packages: com.example.service.impl # 服务实现类包路径 protocol: name: dubbo port: -1 # 随机端口 registry: address: nacos://127.0.0.1:8848服务实现类注意注解DubboServicepackagecom.example.service.impl;importcom.example.service.HelloService;importorg.apache.dubbo.config.annotation.DubboService;DubboService// Dubbo 服务暴露publicclassHelloServiceImplimplementsHelloService{OverridepublicStringsayHello(Stringname){returnHello, name! 来自 Dubbo 服务提供者;}}启动类packagecom.example.service.impl.com.example;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplicationpublicclassProviderApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ProviderApplication.class,args);}}consumer 模块?xml version1.0 encodingUTF-8? project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd parent artifactIddubbo-demo/artifactId groupIdcom.example/groupId version1.0-SNAPSHOT/version /parent modelVersion4.0.0/modelVersion artifactIdconsumer/artifactId dependencies !-- API模块依赖 -- dependency groupIdcom.example/groupId artifactIdapi/artifactId version1.0-SNAPSHOT/version /dependency !-- Spring Boot Web -- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-web/artifactId /dependency !-- Spring Cloud Alibaba Nacos 服务注册发现 -- dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId /dependency dependency groupIdorg.apache.dubbo/groupId artifactIddubbo-spring-boot-starter/artifactId version3.2.11/version /dependency /dependencies /projectserver: port: 8082 spring: application: name: dubbo-consumer cloud: nacos: discovery: server-addr: 127.0.0.1:8848 dubbo: registry: address: nacos://127.0.0.1:8848 cloud: subscribed-services: dubbo-provider # 要调用的服务名provider的application.name服务使用者类HelloControllerpackagecom.example.controller;importcom.example.service.HelloService;importorg.apache.dubbo.config.annotation.DubboReference;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.PathVariable;importorg.springframework.web.bind.annotation.RestController;RestControllerpublicclassHelloController{DubboReference// 远程注入Dubbo服务privateHelloServicehelloService;GetMapping(/hello/{name})publicStringhello(PathVariableStringname){returnhelloService.sayHello(name);}}启动类packagecom.example;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplicationpublicclassConsumerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(ConsumerApplication.class,args);}}三、Nacos服务的准备①. 去Nacos的官网下载页面 :https://nacos.io/download/nacos-server/选择2.x的压缩包进行下载如图②. 解压缩后在nacos\bin的目录使用命令行启动 :startup.cmd -m standalone③. 登录Nacos页面 : http://localhost:8848/nacos 。 如图登录成功四、代码的功能验证启动顺序启动Nacoslocalhost:8848启动dubbo-provider启动dubbo-consumer浏览器访问http://localhost:8082/hello/world返回Hello, world! 来自 Dubbo 服务提供者