RPC和Feign
RPC(Remote Procedure Call,远程过程调用)就是:让你"像调用本地方法一样调用远程服务"。
Feign 是"声明式 HTTP 客户端"
在使用体验上像 RPC
但本质仍然是 HTTP 调用,不是 RPC
Dubbo之所以是RPC,是因为它把"远程服务调用"封装成了"本地方法调用",底层通过代理、序列化和网络通信实现。
Feign = HTTP版远程调用
Dubbo = TCP版本地方法远程调用
Netty
Dubbo 使用 Netty 基于 TCP 长连接来实现 RPC 远程调用的。
功能
1、RPC 远程调用
2、服务注册与发现:dubbo使用注册中心(Zookeeper / Nacos)来实现的。
3、负载均衡
4、容错机制:重试、超时控制、失败转移、快速失败
5、 服务治理:流量控制、黑白名单、限流、权重调整、动态配置
6、高性能通信:Dubbo 底层特点:Netty、TCP 长连接、二进制序列化
整体架构
Provider:服务提供者
Consumer:服务消费者
Registry:注册中心,例如:Nacos、Zookeeper
Monitor:监控中心
监控中心
dubbo-monitor-simple:是 Dubbo 体系里的一个模块,现已不用
使用简易说明:需要下载并启动dubbo-monitor-simple,这是一个服务,注册到注册中心,然后其他服务注册者,服务提供者就需要接入监控中心,也就是从注册中心里找到监控中心。
现在主流监控方案一般是:Dubbo+ Prometheus + Grafana + SkyWalking
使用
java
//公共接口模块
package com.demo.api;
public interface UserService {
String getUserName(Long id);
}
//Provider
<dependencies>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
</dependency>
</dependencies>
package com.demo.provider.service;
import org.apache.dubbo.config.annotation.DubboService;
import com.demo.api.UserService;
@DubboService
public class UserServiceImpl implements UserService {
@Override
public String getUserName(Long id) {
return "用户-" + id;
}
}
server:
port: 8081
dubbo:
application:
name: user-service
registry:
address: nacos://127.0.0.1:8848
protocol:
name: dubbo
port: 20880
//Consumer
package com.demo.consumer.controller;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import com.demo.api.UserService;
@RestController
public class OrderController {
@DubboReference
private UserService userService;
@GetMapping("/test")
public String test() {
return userService.getUserName(1L);
}
}
server:
port: 8082
dubbo:
application:
name: order-service
registry:
address: nacos://127.0.0.1:8848
dubbo-admin
Dubbo Admin 是 Dubbo 官方提供的"可视化管理控制台"。
1、 查看服务状态
2、服务测试
3、流量治理
4、动态配置
5、服务 Mock
6、查看依赖关系
7、集群监控
高级特性
序列化
地址缓存
超时与重试
多版本
负载均衡
集群容错
服务降级