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

高级特性

序列化

地址缓存

超时与重试

多版本

负载均衡

集群容错

服务降级

相关推荐
圆山猫13 分钟前
[Virtualization](四):Linux KVM/RISC-V 的 vCPU 运行路径
java·linux·risc-v
微学AI1 小时前
一根针指向所有方向:挂谷猜想对 LLM Agent 技能-记忆架构的启示
开发语言·人工智能·架构·挂谷猜想
城管不管1 小时前
ReAct、Plan-and-Execute、Reflection 三大智能 Agent 范式核心区别
java·人工智能·算法·spring·ai·动态规划
IT小白杨1 小时前
从环境制备到自动化工作流:多账号运营的工程化架构拆解
java·经验分享·自动化·安全架构·指纹浏览器
豆瓣鸡1 小时前
算法日记 - Day3
java·开发语言·算法
萧瑟余晖2 小时前
Java深入解析篇九之NIO详解
java·网络·nio
韭菜炒鸡肝天2 小时前
VTK开发笔记(一):VTK介绍,Qt..+VSx+VTK.编译
开发语言·笔记·qt
The Chosen One9852 小时前
高进度算法模板速记(待完善)
java·前端·算法
Aaron - Wistron3 小时前
Web API C# (Furion版)带 单元测试
开发语言·后端·c#
Dxy12393102164 小时前
Python项目打包成EXE完整教程(PyInstaller实战避坑)
开发语言·python