【java入门到放弃】Dubbo

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、集群监控

高级特性

序列化

地址缓存

超时与重试

多版本

负载均衡

集群容错

服务降级

相关推荐
JAVA面经实录9177 小时前
Java企业级工程化·终极完整版背诵手册(无遗漏、全覆盖、面试+落地通用)
java·开发语言·面试
周杰伦fans8 小时前
AutoCAD .NET 二次开发:深入理解 EntityJig 的工作原理与正确实现
开发语言·.net
许彰午9 小时前
CacheSQL(二):主从复制——OpLog 环形缓冲区与故障自动恢复
java·数据库·缓存
Bat U10 小时前
JavaEE|多线程初阶(七)
java·开发语言
谭欣辰10 小时前
C++ 排列组合完整指南
开发语言·c++·算法
foundbug99911 小时前
自适应滤除直达波干扰的MATLAB实现
开发语言·算法·matlab
XDH_CS11 小时前
MySQL 8.0 安装与 MySQL Workbench 使用全流程(超详细教程)
开发语言·数据库·mysql
小短腿的代码世界12 小时前
Qt实时盈亏计算深度解析:从持仓数据到动态盈亏展示
开发语言·qt