一、通过模板生成项目脚手架
Dubbo Initializer 可用来快速生成 Java 项目脚手架,帮助简化微服务项目搭建、基本配置、组件依赖管理等。
Initializer 仍在持续更新中,更多 Dubbo Feature 的支持将会陆续发布。
选择 Dubbo 版本
Initializer 将使用 dubbo-spring-boot-starter
创建 Spring Boot 项目,因此我们首先需要选择 Dubbo 与 Spring Boot 的版本。
录入项目基本信息
接下来,填入项目基本信息,包括项目坐标、项目名称、包名、JDK 版本等。
选择项目结构
有两种项目结构可共选择,分别是 单模块
和 多模块
,在这个示例中我们选择 单模块
。
- 单模块,所有组件代码存放在一个 module 中,特点是结构简单。
- 多模块,生成的项目有
API
、Service
两个模块,其中API
用于存放 Dubbo 服务定义,Service
用于存放服务实现或调用逻辑。通常多模块更有利于服务定义的单独管理与发布。
选择依赖组件
我们为模板默认选择如下几个依赖组件:
- Dubbo 组件
- Java Interface
- 注册中心,zookeeper
- 协议 TCP
- 常用微服务组件
- Web
- Mybatis
- 模版引擎
基于以上选项,生成的项目将以 Zookeeper 为注册中心,以高性能 Dubbo2 TCP 协议为 RPC 通信协议,并且增加了 Web、Mybatis 等组件依赖和示例。
注意:上面选中的 Dubbo 组件也都是默认选项,即在不手动添加任何依赖的情况下,打开页面后直接点击代码生成,生成的代码即包含以上 Dubbo 组件。
如手动添加依赖组件,请注意 Dubbo 各个依赖组件之间的隐含组合关系限制,比如
- 如果选择了【Dubbo Service API】-【IDL】,则目前仅支持选择 【Dubbo Protocol】中的 【HTTP/2】或 【gRPC】 协议。
- 同一个依赖分组下,相同类型的依赖只能选择一个,比如 【Dubbo Registry&Config&Metadata】分组下,从注册中心视角【Zookeeper】、【Nacos】只能选一个,如果要设置多注册中心,请在生成的代码中手动修改配置。但注册中心、配置中心可以分别选一个,比如 Zookeeper 和 Apollo 可同时选中。
生成项目模板
- 点击 “浏览代码” 可在线浏览项目结构与代码
- 点击 “获取代码” 生成项目下载地址
项目下载到本地后,解压并导入 IDE 后即可根据需要开发定制 Dubbo 应用。
二、开发服务
发布和调用
通过一个简单的Springboot实例代码,展示Dubbo服务的发布和调用
本文将基于 Dubbo Samples 示例演示如何快速搭建并部署一个微服务应用。 代码地址:dubbo-samples-develop 代码分为三个模块
- api
- develop-provider
- develop-consumer
准备
本示例代码基于Springboot 3.0
1、首先需要一个可用的注册中心 Zookeeper,Nacos,Redis 均可。
2、新建一个maven工程,添加如下依赖
<!-- registry dependency --><dependency><groupId>com.alibaba.nacos</groupId><artifactId>nacos-client</artifactId><version>${nacos.version}</version></dependency><!-- dubbo dependency--><dependency><groupId>org.apache.dubbo</groupId><artifactId>dubbo-spring-boot-starter</artifactId><version>${dubbo.version}</version></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency>
本示例使用的注册中心为Nacos,使用ZK请将nacos-client包替换为对应版本zk客户端包。
发布服务
1、定义服务接口
public interface DevelopService {String invoke(String param);
}
2、服务接口实现
@DubboService(group = "group1",version = "1.0")
public class DevelopProviderServiceV1 implements DevelopService{@Overridepublic String invoke(String param) {StringBuilder s = new StringBuilder();s.append("ServiceV1 param:").append(param);return s.toString();}
}
使用@DubboService 注解,Dubbo会将对应的服务注册到spring, 在spring启动后调用对应的服务导出方法,将服务注册到注册中心, 这样Consumer端才能发现我们发布的服务并调用
3、添加Dubbo配置
添加application.properties相关配置,也可新建dubbo.properties保存dubbo相关配置,内容如下:
dubbo.application.name=provider# Enable token verification for each invocation
dubbo.provider.token=false# Specify the registry address
# dubbo.registry.address=nacos://localhost:8848?username=nacos&password=nacos
dubbo.registry.address=nacos://${nacos.address:localhost}:8848?username=nacos&password=nacosdubbo.protocol.name=dubbo
dubbo.protocol.port=20881
4、启动服务
创建Springboot启动类,需添加@EnableDubbo注解,开启Dubbo自动配置功能
@EnableDubbo
@SpringBootApplication
public class DevelopApplication {public static void main(String[] args) {SpringApplication.run(DevelopApplication.class, args);}
}
启动成功后,在注册中心可以看到对应的服务列表,如图: ![serviceList](/imgs/v3/develop/develop-service-list.png)
调用服务
创建DemoTask类,通过@DubboReference注解对需要调用的服务进行引入。即可像调用本地方法一样调用远程服务了。
//实现CommandLineRunner 让Springboot启动后调用run方法
@Component
public class DemoTask implements CommandLineRunner {@DubboReference(group = "group1",version = "1.0")private DevelopService developService;@Overridepublic void run(String... args) throws Exception {//调用DevelopService的group1分组实现System.out.println("Dubbo Remote Return ======> " + developService.invoke("1"));}
}
启动服务 打印
Dubbo Remote Return ======> ServiceV1 param:1
说明服务调用成功