定位

“Dubbo Producer 指’服务提供者’,负责实现业务接口并通过 Dubbo 框架导出(export)到注册中心/配置中心,使消费方(Consumer)能透明调用。“

角色与职责

  • 接口实现:把业务接口的 Java 实现类暴露成远程服务
  • 协议暴露:把接口转成可远程调用的 Protocol + Serialization
  • 注册治理:向 Registry 报到、续租、下线
  • 运行时资源:管理线程池、连接池、序列化缓冲
  • 服务治理:版本、分组、权重、限流、熔断

关键组件

线程池

“处理业务方法调用;默认 FixedThreadPool + Queue,大流量接口自定义’隔离线程池’,避免阻塞全局”

序列化 (Serialization SPI)

“对象 ↔ ByteBuf;默认 Hessian2,建议换 Protobuf/FST/Kryo 提升 20-50% 吞吐”

连接池 (ChannelPool)

“长连接复用,默认 lazyInit + heartbeat”

过滤器 (Filter SPI)

“服务端链式拦截:日志、权限、限流、灰度”

POM

<dependency>
    <groupId>icu.wzk</groupId>
    <artifactId>wzk-service-api</artifactId>
</dependency>

生产者定义

@Service
public class WzkHelloServiceImpl implements WzkHelloService {
    @Override
    public String sayHello(String name) {
        return "hello ? " + name;
    }
}

配置文件

dubbo.application.name=dubbo-demo-annotation-provider
dubbo.protocol.name=dubbo
dubbo.protocol.port=20880

配置类

@Configuration
@EnableDubbo(scanBasePackages = "icu.wzk.service.impl")
@PropertySource("classpath:/dubbo-provider.properties")
public class ProviderConfiguration {
    @Bean
    public RegistryConfig registryConfig() {
        RegistryConfig registryConfig = new RegistryConfig();
        registryConfig.setAddress("zookeeper://10.10.52.38:2181");
        return registryConfig;
    }
}

Spring Boot 示例

@DubboService(version = "1.0.0", timeout = 3000, retries = 0, executes = 200)
public class OrderServiceImpl implements OrderService {
    @Override
    public OrderSubmitResult submit(OrderDTO in) {
        // 业务逻辑...
        return in;
    }
}

启动流程

  1. Spring Bootstrapping:DubboBootstrap 在 Spring 容器刷新完毕触发 afterPropertiesSet()
  2. 装配 ServiceConfig:解析 @DubboService,补全默认值
  3. 生成 Invoker:Wrapper:Javassist 把目标实现类包装成 Invoker
  4. Protocol.export():创建 Exporter,开启 Server 并绑定端口
  5. Registry.register():生成 URL 并写入 ZooKeeper 节点
  6. MetadataReport:记录接口、方法、参数类型等信息
  7. QOS & Metrics:提供运维指令和监控

生产环境

  • 端口规划:隔离内外网;优先使用 20880/20890 段
  • JVM 参数:-Xms -Xmx -Xmn -XX:+UseG1GC
  • 可观测性:埋点 TraceId;链路接入 SkyWalking / Zipkin
  • 配置中心:Dubbo 3 推荐统一到 Nacos / Apollo
  • CI/CD:灰度 -> 全量;回滚脚本中要显式执行优雅停机
  • 安全:开启 TLS + Token 校验