Dubbo
Dubbo 基本介绍
Dubbo 是一款 Java RPC 轻量框架,主要用于不同服务之间的调用。

RPC 是什么
RPC,也就是远程过程调用,是一种软件通信协议,一个程序可以使用该协议向网络上另一台计算机中的程序请求服务,而无需了解网络的详细信息。RPC用于调用远程系统上的其他进程,如本地系统。过程调用有时也称为函数调用或子例程调用。
RPC 使用客户端-服务器模型。请求程序是客户端,而服务提供程序是服务器。与本地过程调用一样,RPC是一种同步操作,要求挂起请求程序,直到返回远程过程的结果。但是,使用共享相同地址空间的轻量级进程或线程可以同时执行多个RPC。

Dubbo 的基本原理

- Provider:生产者
- Consumer:消费者
- Registry:注册中心
- Monitor:监控
- Container:容器
Dubbo 接口的泛化调用
泛化调用
什么是泛化调用呢?
也就是当你的客户端没有 API 可调用,或者没有模型类元的时候。就需要泛型调用。

具体使用
引入依赖
需要在 xml 文件中去引入依赖,这是 Java 的基本做法:
<properties>
<dubbo.version>2.8.4</dubbo.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo</artifactId>
<version>${dubbo.version}</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-dependencies-zookeeper</artifactId>
<version>${dubbo.version}</version>
<type>pom</type>
</dependency>
</dependencies>
Provider 提供接口
在 Provide 这个模块中,去提供接口。
package com.dubbo.example.provider;
import com.dubbo.example.DemoService;
import com.dubbo.example.User;
import org.apache.dubbo.config.annotation.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Service(version = "1.0.2", group = "age")
public class DemoServiceImpl_1 implements DemoService {
private static final Logger logger = LoggerFactory.getLogger(DemoServiceImpl.class);
@Override
public String sayHello(User user) {
// logger.info("Hello " + name + ", request from consumer: " + RpcContext.getContext().getRemoteAddress());
// return "Hello " + name + ", response from proviwder: " + RpcContext.getContext().getLocalAddress();
return user.age.toString();
}
@Override
public String sayGoodBye(User user) {
return user.age.toString();
}
}
Consumer 调用接口
根据传统的 Dubbo 接口调用方案,我们在 Provider 中定义完接口后,还需要在 Consumer 中去调用接口。
package com.dubbo.example.consumer;
import com.dubbo.example.DemoService;
import com.dubbo.example.User;
import org.apache.dubbo.config.annotation.Reference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
@EnableAutoConfiguration
public class DubboConsumerBootstrap {
private final Logger logger = LoggerFactory.getLogger(getClass());
@Reference(version = "1.0.0", url = "dubbo://127.0.0.1:12345")
private DemoService demoService;
public static void main(String[] args) {
SpringApplication.run(DubboConsumerBootstrap.class).close();
}
@Bean
public ApplicationRunner runner() {
User user = new User();
return args -> logger.info(demoService.sayHello(user));
}
}
这种调用方案并不直观,也不利于团队内的多人协作。
使用 Apifox 调用 Dubbo 接口
Dubbo 本身就是 RPC 的一种远程调用的方案。访问 Dubbo 服务可类比为调用 RPC 的服务。因此我们需要使用专业的 API 工具来进行接口的请求,今天我选择了 Apifox 来进行请求,因为它支持中文,且支持免费调用 Dubbo 接口。
新建一个 Dubbo 请求
我已经起好了一个 Dubbo,并编写了一个接口。想要调试的话,我们需要在 Apifox 中去新建一个请求,并填写好对应的名称、访问路径以及请求方法。

发送一个 Dubbo 请求
接着我们到达运行页面,填入请求 body 的参数,传递参数的格式是:
{
"jsonrpc": "2.0",
"method": {{要调用的方法名称}},
"params": {{方法所需的参数}},
"phone": {{手机号}},
"name": {{名称}},
"age": 68
}
所以我们填入正确格式的请求参数:
{
"jsonrpc": "2.0",
"method": "echo",
"params": {
"text": "Dubbo result"
},
"phone": "0692-23134477",
"name": "放保参分",
"age": 68
}
并且点击发送运行,得到 Dubbo 服务那边返回的数据。

关于 Apifox
- 集成了 API 文档、API 调试、API Mock、API 自动化测试 API 一体化协作平台
- 拥有更先进的 API 设计/开发/测试工具
- Apifox = Postman + Swagger + Mock + JMeter
Apifox 提供了一种全面的 API 管理解决方案。使用 Apifox ,你可以在统一的平台上设计、调试、测试以及协作你的 API,消除了在不同工具之间切换和数据不一致的问题。
个人使用体验还是不错的,推荐使用:在线使用 Apifox。完全免费的哦~
