这段时间在接触分布式的内容,因为公司的技术栈是 dubbo ,所以我顺其自然地选择了 dubbo 作为我学习的框架。
看了任务清单,这篇文章应该是在6天前出来的,但是因为实习等等的一些事情耽误了,今天立下决心动笔了。
必需
JAVA 环境
注册中心(我选用的是 nacos )
非必需
Maven
docker
idea(这个应该是必需的?当然也可以用记事本(滑稽.jpg))
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.10</version> <scope>provided</scope> </dependency>
其实也可以不要 lombok ,此处只是方便调试。
api -- 普通 maven 项目,用于定义provider以及consumer交互的接口以及规范 provider -- Spring Boot 本地项目,用于为 api 中定义的服务接口创建实体类 consumer -- Spring Boot web 项目,接收用户请求,调用 provider 处理请求并返回结果
模块pom定义
<modules> <module>api</module> <module>provider</module> <module>consumer</module> </modules>
* api 新增 ``` <version>0.0.1-SNAPSHOT</version> ``` * consumer 新增 ``` <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com</groupId> <artifactId>api</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-nacos</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.0.0</version> </dependency> </dependencies> ``` * provider 新增 ``` <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com</groupId> <artifactId>api</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-spring-boot-starter</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>org.apache.dubbo</groupId> <artifactId>dubbo-registry-nacos</artifactId> <version>2.7.3</version> </dependency> <dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>1.0.0</version> </dependency> </dependencies> ```
模块配置文件
dubbo: registry: address: nacos://192.168.99.100:8848 application: name: dubbo-provider
* consumer 配置文件 ``` spring: application: name: dubbo-consumer cloud: nacos: discovery: server-addr: 192.168.99.100 server: port: 8081 servlet: context-path: /text dubbo: protocol: port: -1 name: dubbo registry: address: nacos://192.168.99.100:8848 cloud: subscribed-services: dubbo-spring-cloud-provider application: name: consumer ```
package com.api; public interface HelloService { String say(String name); }
package com.producer; import com.api.HelloService; import org.apache.dubbo.config.annotation.Service; import org.springframework.stereotype.Component; @Service @Component public class HelloServiceImp implements HelloService { @Override public String say(String name) { return "hello,"+name; } }
注意:@Service 注解是 dubbo 的注解,不是 Spring 的注解
package com.consumer; import com.api.HelloService; import org.apache.dubbo.config.annotation.Reference; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; @RestController public class TextController { @Reference private HelloService helloService; @GetMapping("/text") public String text(){ return helloService.say("cartoon"); } }
dubbo 的服务消费应该在消费者中的 Service 层做整合消费后返回处理结果,这里仅为演示。
先运行 provider 再运行 consumer,否则 dubbo 会因无法找到服务提供者自行关闭消费者。
虽然在网上已经有很多这方面的教程,但是大多是用 zookeeper 作为注册中心。
而个人喜欢接触新技术,nacos 在今年1月才由阿里开源出来。而且我比较喜欢 nacos 的界面风格,虽然 nacos 在功能上不如 zookeeper+dubboAdmin 强大,但是作为入门应该是足够的。
在我的任务清单上,还规划着 dubbo 的 spi 机制的全注解辅以配置文件使用文章,但是因为时间以及我对机制还没深入理解,所以我将这篇文章押后了,等深入源码之后再根据源码写出我想要的文章。
本文首发于 cartoon的博客
转载请注明出处: https://cartoonyu.github.io/cartoon-blog/post/dubbo/dubbo与springboot的结合/