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

高级特性

序列化

地址缓存

超时与重试

多版本

负载均衡

集群容错

服务降级

相关推荐
测试员周周15 小时前
【Appium 系列】第16节-WebView-H5上下文切换 — 混合应用的自动化难点
运维·开发语言·人工智能·功能测试·appium·自动化·测试用例
Mahir0817 小时前
Spring 循环依赖深度解密:从问题本质到三级缓存源码级解析
java·后端·spring·缓存·面试·循环依赖·三级缓存
杜子不疼.17 小时前
【C++ AI 大模型接入 SDK】 - DeepSeek 模型接入(上)
开发语言·c++·chatgpt
加号318 小时前
【C#】 串口通信技术深度解析及实现
开发语言·c#
sycmancia18 小时前
Qt——编辑交互功能的实现
开发语言·qt
RyFit18 小时前
SpringAI 常见问题及解决方案大全
java·ai
石山代码19 小时前
C++ 内存分区 堆区
java·开发语言·c++
绝知此事19 小时前
【算法突围 01】线性结构与哈希表:后端开发的收纳术
java·数据结构·算法·面试·jdk·散列表
无风听海19 小时前
C# 隐式转换深度解析
java·开发语言·c#
一只大袋鼠20 小时前
Git 进阶(二):分支管理、暂存栈、远程仓库与多人协作
java·开发语言·git