SpringBoot+Dubbo+Nacos 开发实战教程
近些年,微服务架构一直在持续活跃,是大公司都在使用的技术之一。实现微服务架构的方式有很多,Dubbo 是国内比较流行的一种,它是阿里巴巴开源的高性能服务框架,目前正在 Apache 官方孵化中。Nacos 是阿里巴巴开源的一款分布式服务发现、配置管理和服务管理平台,支持 DNS 和 HTTP 方式的服务发现,支持动态配置服务,可伸缩和易于使用。本篇文章将为大家介绍 SpringBoot+Dubbo+Nacos 的开发实战教程。
一、环境准备
在开始本教程之前,需要先准备好相应的环境和工具。
1. JDK 环境
本教程需要 JDK1.8 及以上版本,需要安装并配置好环境变量。
2. Maven 环境
本教程需要使用 Maven 进行依赖管理和项目构建。需要安装 Maven 并配置好相关环境变量。
3. IntelliJ IDEA
本教程使用 IntelliJ IDEA 作为开发工具,可以根据个人喜好选择其他 IDE。
4. Dubbo
本教程使用 Dubbo 作为服务框架,可以通过 Maven 依赖的方式来引入。
5. Nacos
本教程使用 Nacos 作为服务注册和配置中心,需要安装并启动 Nacos 服务。
二、搭建服务提供者
对于 Dubbo 服务架构的基础知识这里不再赘述,具体可以参考 Dubbo 官网文档。这里我们将从搭建服务提供者开始介绍。服务提供者作为 Dubbo 服务中的一方,提供具体的服务实现。
1. 创建 SpringBoot 项目
首先需要在 IntelliJ IDEA 中创建一个新的 SpringBoot 项目。具体操作可以参考 Spring 官方文档进行。
2. 引入 Dubbo 和 Nacos 相关依赖
在 pom.xml 文件中加入 Dubbo 和 Nacos 的相关依赖。
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>1.4.0</version>
</dependency>
3. 创建服务提供者接口和实现类
在项目中创建服务提供者接口和实现类。接口中定义服务需要提供的方法,实现类中实现具体的服务逻辑。
public interface HelloService {
String sayHello(String name);
}
@Service
public class HelloServiceImpl implements HelloService {
@Override
public String sayHello(String name) {
return "Hello " + name + " !";
}
}
4. 配置 Dubbo 和 Nacos 服务
在 application.yml 文件中配置 Dubbo 和 Nacos 服务相关的信息。
spring:
application:
name: provider-demo
dubbo:
scan:
base-packages: com.example.provider.service
registry:
address: nacos://localhost:8848
protocol:
name: dubbo
port: 20001
nacos:
discovery:
server-addr: localhost:8848
配置中,"provider-demo" 为服务提供者的应用名称,"com.example.provider.service" 为服务提供者所在的包。Dubbo 服务注册到 Nacos 注册中心上,Nacos 的服务注册和发现也是通过地址 "localhost:8848" 来进行。dubbo.scan.base-packages 用于扫描 Dubbo 的服务接口和实现类,进行服务注册和发布。
5. 启动服务提供者
现在就可以启动服务提供者了。因为没有暴露成 Web 服务,所以使用类似于 Junit 的方式进行测试。具体代码如下:
@SpringBootTest
class ProviderDemoApplicationTests {
@Autowired
private HelloService helloService;
@Test
void testHelloService() {
String result = helloService.sayHello("dubbo");
Assertions.assertEquals("Hello dubbo !", result);
System.out.println(result);
}
}
6. 验证服务提供者
服务提供者启动完成后,可以通过 Dubbo 的管理界面进行验证。Dubbo 的管理界面有两种,一种是 Dubbo-Admin,另一种是 Dubbo-Dashboard。
Dubbo-Admin 是 Dubbo 官方的管理界面,使用比较简单,可以直接部署需要管理的服务上。首先需要下载 Dubbo-Admin 的代码,将其打包成 war 包放到 Tomcat 服务器的 webapps 目录下,Dubbo-Admin 就能通过 http://localhost:8080/dubbo-admin/ 的方式进行访问。
Dubbo-Dashboard 是用于管理 Dubbo 服务的可视化监控平台。可以通过以下命令进行安装:
wget http://dubbo.apache.org/books/dubbo-admin-scripts-2.7.9.tar.gz
tar -xvf dubbo-admin-scripts-2.7.9.tar.gz
sh ./start.sh
访问 http://localhost:7001/ 就能进入 Dubbo-Dashboard 界面,如下图:
可以看到,服务已经成功注册到了 Nacos 中,且提供了 HelloService 服务。
三、搭建服务消费者
服务消费者是 Dubbo 服务的使用方,通过消费者可以调用提供者提供的服务。
1. 创建 SpringBoot 项目
在 IntelliJ IDEA 中创建一个新的 SpringBoot 项目,和服务提供者的创建相同。
2. 引入 Dubbo 和 Nacos 相关依赖
在 pom.xml 文件中加入 Dubbo 和 Nacos 的相关依赖,和服务提供者一致。
3. 创建服务消费者接口
在项目中创建服务消费者的接口,用来调用服务提供者的服务。
public interface ConsumerService {
String callHelloService(String name);
}
4. 配置 Dubbo 和 Nacos 服务
在 application.yml 文件中配置 Dubbo 和 Nacos 服务相关的信息。和服务提供者配置中的信息大致相同,只是服务发现的方式不同。
spring:
application:
name: consumer-demo
dubbo:
scan:
base-packages: com.example.consumer.service
registry:
address: nacos://localhost:8848
consumer:
check: false
nacos:
discovery:
server-addr: localhost:8848
配置中需要设置 dubbo.consumer.check 参数为 false,否则会在调用服务时抛出 "No provider available..." 异常。
5. 创建服务消费者实现类
在项目中创建服务消费者的实现类,实现调用服务提供者的方法。
@Service
public class ConsumerServiceImpl implements ConsumerService {
@Reference
private HelloService helloService;
@Override
public String callHelloService(String name) {
return helloService.sayHello(name);
}
}
这里需要注意的是,使用 Dubbo 注解 @Reference 来注入 HelloService 服务提供者,在调用 HelloService 的 sayHello 方法时会通过 Dubbo 进行 RPC 调用。
6. 测试服务消费者
现在就可以启动服务消费者了。这里测试使用的是 RESTful 接口和 Postman 工具进行操作。
首先,在服务提供方启动后,通过 Dubbo-Dashboard 可以看到服务已经成功注册到 Nacos:
然后,在本地启动服务消费者,在 Postman 中访问调用消费者的 RESTful 接口。
请求 URL:
GET http://localhost:8080/hello?name=dubbo
响应数据:
{
"message": "Hello dubbo !"
}
四、总结
本文介绍了 SpringBoot+Dubbo+Nacos 的开发实现过程,通过创建服务提供者和消费者实现了 Dubbo 服务的注册和调用。其中,Nacos 作为注册中心可以方便地管理服务的注册和调用,Dubbo 则提供了基于 RPC 的调用方式,大大降低了服务调用的复杂度。相信对于想要使用 Dubbo 的同学来说,这篇文章会有一定的帮助。