From 6d24388690d8c35833280179c137ba352a61ab90 Mon Sep 17 00:00:00 2001 From: yukaidi Date: Thu, 28 May 2026 23:42:24 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20ServiceVerticle=20=E4=BF=9D=E5=AD=98=20M?= =?UTF-8?q?essageConsumer=20=E5=BC=95=E7=94=A8=EF=BC=8C=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=20unregister=20=E5=8F=82=E6=95=B0=E7=B1=BB=E5=9E=8B=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 审查发现 unregister(address) 参数类型不匹配,ServiceBinder.unregister() 需要 MessageConsumer 而非 String。改为保存 register() 返回的 MessageConsumer, stop() 中直接调用 consumer.unregister()。同时修复日志在 clear() 后读 size 始终为 0 的 bug。 --- .../vx/core/verticle/ServiceVerticle.java | 21 +++++++++++-------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/cn/qaiu/vx/core/verticle/ServiceVerticle.java b/core/src/main/java/cn/qaiu/vx/core/verticle/ServiceVerticle.java index 05b8311..0ff23d7 100644 --- a/core/src/main/java/cn/qaiu/vx/core/verticle/ServiceVerticle.java +++ b/core/src/main/java/cn/qaiu/vx/core/verticle/ServiceVerticle.java @@ -5,6 +5,8 @@ import cn.qaiu.vx.core.base.BaseAsyncService; import cn.qaiu.vx.core.util.ReflectionUtil; import io.vertx.core.AbstractVerticle; import io.vertx.core.Promise; +import io.vertx.core.eventbus.MessageConsumer; +import io.vertx.core.json.JsonObject; import io.vertx.serviceproxy.ServiceBinder; import org.reflections.Reflections; import org.slf4j.Logger; @@ -26,7 +28,7 @@ public class ServiceVerticle extends AbstractVerticle { Logger LOGGER = LoggerFactory.getLogger(ServiceVerticle.class); private static final AtomicInteger ID = new AtomicInteger(1); private static final Set> handlers; - private final List registeredAddresses = new ArrayList<>(); + private final List> consumers = new ArrayList<>(); static { Reflections reflections = ReflectionUtil.getReflections(); @@ -43,8 +45,9 @@ public class ServiceVerticle extends AbstractVerticle { serviceNames.append(asyncService.getName()).append("|"); BaseAsyncService asInstance = (BaseAsyncService) ReflectionUtil.newWithNoParam(asyncService); String address = asInstance.getAddress(); - binder.setAddress(address).register(asInstance.getAsyncInterfaceClass(), asInstance); - registeredAddresses.add(address); + MessageConsumer consumer = binder.setAddress(address) + .register(asInstance.getAsyncInterfaceClass(), asInstance); + consumers.add(consumer); } catch (Exception e) { LOGGER.error("Failed to register service: {}", asyncService.getName(), e); } @@ -57,16 +60,16 @@ public class ServiceVerticle extends AbstractVerticle { @Override public void stop(Promise stopPromise) { - ServiceBinder binder = new ServiceBinder(vertx); - registeredAddresses.forEach(address -> { + int count = consumers.size(); + consumers.forEach(consumer -> { try { - binder.setAddress(address).unregister(address); + consumer.unregister(); } catch (Exception e) { - LOGGER.debug("Failed to unregister service at address: {}", address, e); + LOGGER.warn("Failed to unregister service consumer at address: {}", consumer.address(), e); } }); - registeredAddresses.clear(); - LOGGER.info("ServiceVerticle stopped, unregistered {} services", registeredAddresses.size()); + consumers.clear(); + LOGGER.info("ServiceVerticle stopped, unregistered {} services", count); stopPromise.complete(); } }