- 作者简介:☕️大家好,我是Aomsir,一个爱折腾的开发者!
- 个人主页:Aomsir_Spring5应用专栏,Netty应用专栏,RPC应用专栏
- 当前专栏:Dubbo3应用专栏_Aomsir的博客
引言
最近在学习Dubbo3,需要频繁的对
dubbo协议
、triple协议
、rest协议
、gRPC等协议
与hessian2
、Protobuf
、JSON
、Kyro
、FST等序列化方式
的整合测试,每次都得去修改Client与Server的各项配置信息,无意间看到Apifox已经对Dubbo与gRPC的部分协议与序列化方式提供支持,测试了一番还挺好用。注:Apifox对于Dubbo项目的支持目前需要下载
Alpha版本
,官网下载即可
直连测试
所谓直连测试就是就是不引用
注册中心(Nacos、Zookeeper、Consul等)
,客户端直接使用服务端的IP+端口进行RPC调用。
服务端设计
对此,我写了一个服务端demo,名为dubbo-20-go
,使用Dubbo-3.2.0
、SpringFramework-5.3.25
,提供一个UserService接口(来自dubbo-01-api)与其实现类UserServiceImpl,接口内提供两个login方法
项目结构
结构如下
代码分析
为了后续可以更好的理解SpringBoot是如何对Dubbo进行封装的,直连测试未使用SpringBoot,而是使用SpringFramework。发布的服务使用dubbo协议进行网络通信,使用hessian2进行序列化,服务端端口从20880递增
xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd">
<!--全局唯一的应用名-->
<dubbo:application name="dubbo-20-go">
<!--关闭qos启动-->
<dubbo:parameter key="qos.enable" value="false" />
</dubbo:application>
<!--网络通信协议与端口-->
<dubbo:protocol name="dubbo" port="-1" serialization="hessian2"/>
<bean id="userService" class="com.aomsir.service.UserServiceImpl" />
<!--Dubbo发布服务-->
<dubbo:service interface="com.aomsir.service.UserService" ref="userService" />
</beans>
java
public class ProviderMain {
public static void main(String[] args) throws InterruptedException {
// 创建工厂并启动
ClassPathXmlApplicationContext applicationContext
= new ClassPathXmlApplicationContext("applicationContext-provider.xml");
applicationContext.start();
new CountDownLatch(1).await();
}
}
服务启动
服务启动会将项目中扫描到的所有服务进行发布,如下发布了UserService服务
Apifox调用
新建Dubbo项目
这个地方有个疑惑,Apifox将Triple协议归为gRPC项目在,我寻思着Triple协议是Dubbo官方改进gRPC后的结果呀,支持了HTTP1的调用,也是Dubbo3最大的一个卖点,看后续会不会改进。
设置测试环境
既然我们要将Apifox作为Consumer去进行调用,那就需要设置环境,如下按照服务端IP+端口进行设置,我是本地起的服务,所以如下
添加服务
将服务端发布的服务在Apifox中进行配置,如下
发起调用
点击按钮即可发起调用,如下即调用成功
注册中心测试
在当今分布式微服务的架构下,我们很少会使用直连,而是使用注册中心,如下图
服务端设计
项目结构
对于引入注册中心的服务端,我就采用SpringBoot进行整合构建Dubbo服务了,如我的dubbo-02-register-provider
,使用Dubbo-3-2.0
、SpringBoot-2.7.12
、nacos-2.2.3
接口与方法和上面的直连测试一致
代码细节
yml
spring:
application:
name: DUBBO-02-REGISTER-PROVIDER
dubbo:
protocol:
name: dubbo
port: -1
registry:
address: nacos://localhost:8848
application:
qos-enable: false
服务发布
这次使用的是注册中心调用,我选择了Nacos进行演示,Nacos与Zookeeper同理,启动Nacos,然后启动服务端进行服务发布
Apifox调用
设置测试环境
注册中心的调用也需要修改Apifox测试环境,如下
发起调用
由于调用的服务与上面直连测试
的是一致的,所以不作赘述,直接调用
结语
无意间发现的新功能,极大的降低了我的测试时间成本,但是Triple协议的归属以及支持度还不是特别满意,目前Dubbo项目还只支持dubbo协议和hessian2序列化方案的搭配,看看后期官方能否支持的更多一点!