dubbo获取本服务提供的生产者,消费者等信息

1 场景描述

需求场景描述:dubbo服务启动时需要将当前应用提供的dubbo服务上报出去。所以需要一个获取所有当前服务中所有dubbo服务的功能。
所以现在大概两步走就行了

  • 1 获取当前应用所有的dubbo服务信息
  • 2 发送上报

2 实现功能

2.1获取当前应用所有的dubbo服务信息

翻看dubbo代码时发现一个类,包含所需要的信息。

ServiceRepository serviceRepository = ApplicationModel.getServiceRepository();
// 当前应用提供的dubbo服务信息(所有dubbo服务生产者)
List<ProviderModel> exportedServices = serviceRepository.getExportedServices();
// 当前应用所有的dubbo消费者
List<ConsumerModel> referredServices = serviceRepository.getReferredServices();

ServiceRepository 这个类主要的三个属性

public class ServiceRepository extends LifecycleAdapter implements FrameworkExt {

    public static final String NAME = "repository";

    // services
    private ConcurrentMap<String, ServiceDescriptor> services = new ConcurrentHashMap<>();

    // 包含了当前服务提供的consumers
    private ConcurrentMap<String, ConsumerModel> consumers = new ConcurrentHashMap<>();

    // 包含了当前服务提供的provider
    private ConcurrentMap<String, ProviderModel> providers = new ConcurrentHashMap<>();

    // 和providers类似,只是key略有不同
    private ConcurrentMap<String, ProviderModel> providersWithoutGroup = new ConcurrentHashMap<>();

2.2 发送上报

上报功能没什么可写的。这里就记录一下的运行时间点,我这用的是监听DubboBootstrapStartedEvent事件,在监听实践中使用2.1的代码获取所有信息。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐