环境准备篇
本文目的是关于Dubbo纯注解版的使用以及注册中心采用nacos,所以在工程结构以及命名方面可能不是那么规范
首先我们看一下整体的工程结构,你可以简单的理解成有两个springboot工程,都引入了一个公共的模块或者公共包,而这个公共模块就是专门来放暴露的接口的
相关依赖
对应springboot工程使用dubbo非常简单,只需要引入dubbo依赖即可,但是最好注意一下版本(两个工程依赖都一致的)
<!-- SpringBoot 依赖配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.12-SNAPSHOT</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--dubbo相关-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.7.12</version>
</dependency>
<!--因为要采用nacos注册中心-->
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
<version>2.7.12</version>
</dependency>
nacos准备
学习使用的目的,所以nacos只需要准备个单机即可,也无需考虑数据持久化问题,直接去nacos地址下载一个部署即可,我是liunx环境,下载是2.0.3版本的(版本无所谓)
liunx中解压后直接去bin目录下 运行命令启动即可
bash startup.sh -m standalone
默认端口是8848 ,这时候输入网址http://xxxxxx:8848/nacos 打开成功就OK了,默认账号密码
nacos nacos
代码编写
首先在公共模块中新建一个接口 TestService
public interface TestService {
String test(String message);
}
服务提供者
dubbo-annotation-producer工程:就是把自己的一些接口服务暴露出去可以让别的服务调用
配置文件
server:
port: 8081
dubbo:
registry:
# 注册中心地址 采用nacos
address: nacos://IP:PORT
# 分组
group: DUBBO_TEST
protocol:
# 协议选择 这里选择dubbo
name: dubbo
# 通信端口
port: 22223
application:
# 应用名称 服务名即可
name: dubbo-producer
scan:
# 需要暴露接口的包名(可以理解为mybatis中扫描mapper)
base-packages: cn.colins.api
接口实现:添加@DubboService注解
@Component
// 此注解代表将该接口服务暴露出去
@DubboService
public class ProducerTestService implements TestService {
public String test(String message) {
return message;
}
}
启动类:添加@EnableDubbo注解
@EnableDubbo
@SpringBootApplication
public class DubboAnnotationProducerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboAnnotationProducerApplication.class, args);
}
}
服务使用者
dubbo-annotation-consumer工程:调用别的服务暴露出去的接口服务
配置文件
server:
port: 9000
dubbo:
registry:
# 注册中心地址 采用nacos
address: nacos://IP:PORT
# 分组
group: DUBBO_TEST
protocol:
# 协议选择 这里选择dubbo
name: dubbo
# 通信端口
port: 33333
application:
# 应用名称 服务名即可
name: dubbo-consumer
scan:
# 需要暴露接口的包名(可以理解为mybatis中扫描mapper)
base-packages: cn.colins.api
接口调用:就是常规的controller层写法,但是服务不在是从spring容器中取了,而是采用@DubboReference注解从dubbo中获取
@RestController
public class ConsumerTestController {
// check代表启动不检查
@DubboReference(check = false)
private TestService testService;
@GetMapping("/test")
public String test(String message){
return testService.test(message);
}
}
启动类:添加@EnableDubbo注解
@EnableDubbo
@SpringBootApplication
public class DubboAnnotationConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboAnnotationConsumerApplication.class, args);
}
}
整体结构图
结果
两个工程启动后,可以在nacos控制台服务中看到
浏览器请求接口
这样简单的环境就搞定了,只需要注意producer和consumer这样命名只是为了更好的理解,服务提供者和服务调用者的概念,事实上每个微服务都可以即是提供者,也是调用者,可以看到用注解比用xml要简单方便的多,以前的容器是spring提供的,现在可以理解为有个dubbo的容器,可以往里面塞服务和取服务