From 625e0103e3a9462b1ecf69550071c6691d80dfec Mon Sep 17 00:00:00 2001 From: Albumen Kevin Date: Tue, 20 Jun 2023 21:18:20 +0800 Subject: [PATCH] Fix export --- .../registry/integration/ExporterFactory.java | 21 +++++++++---------- .../integration/RegistryProtocol.java | 3 ++- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/ExporterFactory.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/ExporterFactory.java index 31ef045580b..5eebc1bcaac 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/ExporterFactory.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/ExporterFactory.java @@ -16,25 +16,24 @@ */ package org.apache.dubbo.registry.integration; -import org.apache.dubbo.rpc.Invoker; -import org.apache.dubbo.rpc.Protocol; -import org.apache.dubbo.rpc.model.FrameworkModel; +import org.apache.dubbo.rpc.Exporter; import java.util.Map; +import java.util.concurrent.Callable; import java.util.concurrent.ConcurrentHashMap; public class ExporterFactory { private final Map> exporters = new ConcurrentHashMap<>(); - private final Protocol protocol; - - public ExporterFactory(FrameworkModel frameworkModel) { - this.protocol = frameworkModel.getExtensionLoader(Protocol.class).getAdaptiveExtension(); - } - - protected ReferenceCountExporter createExporter(String providerKey, Invoker invoker) { + protected ReferenceCountExporter createExporter(String providerKey, Callable> exporterProducer) { return exporters.computeIfAbsent(providerKey, - key -> new ReferenceCountExporter<>(protocol.export(invoker), key, this)); + key -> { + try { + return new ReferenceCountExporter<>(exporterProducer.call(), key, this); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); } protected void remove(String key, ReferenceCountExporter exporter) { diff --git a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java index b1fea8324c0..c30ac521b90 100644 --- a/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java +++ b/dubbo-registry/dubbo-registry-api/src/main/java/org/apache/dubbo/registry/integration/RegistryProtocol.java @@ -319,7 +319,8 @@ private ExporterChangeableWrapper doLocalExport(final Invoker originIn .computeIfAbsent(registryUrlKey, s -> { Invoker invokerDelegate = new InvokerDelegate<>(originInvoker, providerUrl); return new ExporterChangeableWrapper<>( - (ReferenceCountExporter) exporterFactory.createExporter(providerUrlKey, invokerDelegate), originInvoker); + (ReferenceCountExporter) exporterFactory.createExporter(providerUrlKey, + () -> protocol.export(originInvoker)), originInvoker); }); }