文章目录- 一、前言
- Feign和Dubbo到底有啥区别,为啥大厂都爱用RPC框架?
- 二、简介
- 三、dubbo-api(对外暴漏的接口)
- 1、pom依赖
- 2、TestService接口
- 四、dubbo-provider(服务提供者)
- 1、pom依赖
- 2、TestServiceImpl实现类
- 3、application.yml
- 4、DubboProviderApplication启动类
- 五、dubbo-consumer(服务消费者)
- 1、pom依赖
- 2、TestController
- 3、application.yml
- 4、DubboConsumerApplication
- 5、服务启动
- Feign和Dubbo到底有啥区别,为啥大厂都爱用RPC框架?
- 1、pom依赖
- 2、TestService接口
- 1、pom依赖
- 2、TestServiceImpl实现类
- 3、application.yml
- 4、DubboProviderApplication启动类
- 1、pom依赖
- 2、TestController
- 3、application.yml
- 4、DubboConsumerApplication
- 5、服务启动
一、前言
之前有写过Dubbo2 Zookeeper的RPC远程调用框架demo,因为Dubbo3出来已经一段时间了,加上Zookeeper这玩意很少有人用了,所以结合实下流行的Dubbo3 Nacos搭建一套RPC远程调用框架demo。Nacos也是阿里出的,我前面的文章也有写过,是一个优秀的注册中心和配置中心。
Feign和Dubbo到底有啥区别,为啥大厂都爱用RPC框架?
Feign是Spring Cloud的,基于http协议,缺点是不支持高并发。互联网流量大,RPC框架,性能消耗低,传输效率高,服务治理方便,所以大厂都喜欢用RPC框架,尤其是内部服务,当然不一定用Dubbo,大厂都有自研的RPC框架。Dubbo是阿里开源的,阿里自己已经不用了,他们内部还有一套更优秀的RPC框架。
二、简介
Dubbo3官网:https://dubbo.apache.org/zh/docs/v3.0/introduction/
Apache Dubbo 是一款微服务开发框架,它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着,使用 Dubbo 开发的微服务,将具备相互之间的远程发现与通信能力, 同时利用 Dubbo 提供的丰富服务治理能力,可以实现诸如服务发现、负载均衡、流量调度等服务治理诉求。同时 Dubbo 是高度可扩展的,用户几乎可以在任意功能点去定制自己的实现,以改变框架的默认行为来满足自己的业务需求。
Dubbo3 基于 Dubbo2 演进而来,在保持原有核心功能特性的同时, Dubbo3 在易用性、超大规模微服务实践、云原生基础设施适配等几大方向上进行了全面升级。
三、dubbo-api(对外暴漏的接口)
以下采用的版本:
- Dubbo:3.0.6
- Nacos:2.0.3
1、pom依赖
代码语言:javascript复制<!--Dubbo依赖-->
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
</dependencies>
2、TestService接口
代码语言:javascript复制public interface TestService {
/**
* 获取名称
*
* @param id
* @return
*/
String getName(Integer id);
}
四、dubbo-provider(服务提供者)
1、pom依赖
代码语言:javascript复制<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</dependency>
<!--依赖-->
<dependency>
<groupId>com.dubbo</groupId>
<artifactId>dubbo-api</artifactId>
</dependency>
</dependencies>
2、TestServiceImpl实现类
代码语言:javascript复制@DubboService
public class TestServiceImpl implements TestService {
@Override
public String getName(Integer id) {
// 模拟查询数据库操作,返回了"张三";
return "张三";
}
}
3、application.yml
代码语言:javascript复制server:
port: 8001
spring:
application:
name: dubbo-provider
dubbo:
# 注册中心地址
registry:
address: nacos://192.168.60.123:8848
protocol:
name: dubbo
port: 20880
4、DubboProviderApplication启动类
代码语言:javascript复制@SpringBootApplication
@EnableDubbo(scanBasePackages = "com.dubbo.provider.service")
public class DubboProviderApplication {
public static void main(String[] args) {
SpringApplication.run(DubboProviderApplication.class, args);
}
}
五、dubbo-consumer(服务消费者)
1、pom依赖
代码语言:javascript复制<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</dependency>
<!--依赖-->
<dependency>
<groupId>com.dubbo</groupId>
<artifactId>dubbo-api</artifactId>
</dependency>
</dependencies>
2、TestController
代码语言:javascript复制@RestController
public class TestController {
@DubboReference
private TestService testService;
@GetMapping("/test")
public String test(Integer id) {
return testService.getName(id);
}
}
3、application.yml
代码语言:javascript复制server:
port: 8002
spring:
application:
name: dubbo-consumer
dubbo:
# 注册中心地址
registry:
address: nacos://192.168.60.123:8848?register=false
protocol:
name: dubbo
port: -1
注意1:端口号-1,是为了让它自己递增。 注意2:有人遇到,消费者服务启动不起来!因为dubbo的客户端在启动的时候,默认检查是否有可用的远程服务。这边可以加上这个:
代码语言:javascript复制consumer:
# 取消服务启动检查
check: false
4、DubboConsumerApplication
代码语言:javascript复制@SpringBootApplication
@EnableDubbo
public class DubboConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(DubboConsumerApplication.class, args);
}
}
5、服务启动
Nacos管理控制台 可以看到服务注册上来了,Dubbo 3支持多种注册模式,相比于 2.x 版本中的基于接口粒度的服务发现机制,3.x 引入了全新的基于应用粒度的服务发现机制。(默认接口和应用都注册)
浏览器访问:http://localhost:8002/test
✅ 到这里服务算是通了!
✅ 源码github下载地址:点这里,如果没有github,留下邮箱,会发你。
✅Dubbo 3 新增了不少核心特性,可以试试。(https://dubbo.apache.org/zh/docs/v3.0/new-in-dubbo3/)