diff --git a/src/main/java/com/yunhai/svchall/service/impl/FcAnswerConsumer.java b/src/main/java/com/yunhai/svchall/service/impl/FcAnswerConsumer.java index 08bd96a..eb336b9 100644 --- a/src/main/java/com/yunhai/svchall/service/impl/FcAnswerConsumer.java +++ b/src/main/java/com/yunhai/svchall/service/impl/FcAnswerConsumer.java @@ -26,9 +26,13 @@ import java.util.List; /** * v2 快照消费者(answer-delivery-v2 §7,TASK_2 B.5/B.6)。 * - *

本类由 {@link FcAnswerMqConfiguration} 在已配置 broker 时才绑上监听容器; - * 未接 MQ 的环境里它只是"没人投递的一个 bean",但投影链仍可用——可信建件的第二条路径 - * (签名收据确认)不依赖 broker,这也是本机联调能跑通全链的原因。

+ *

本类整体条件装配:只有显式配了 {@code spring.rabbitmq.host} 才存在(与 + * {@link FcAnswerMqConfiguration} 同一条件表达式)。未接 MQ 的环境里 bean 不创建, + * {@code @RabbitListener} 端点自然不被注册——"MQ 可选"必须落到启动期:注解处理器在 + * 容器工厂缺失时会直接抛 {@code NoSuchBeanDefinitionException} 打断启动,不会优雅跳过。 + * 重报扫描随之停摆是安全的:{@code fc_answer_inbox} 的唯一写入口是 {@code #onMessage} + * (经 {@code AnswerProjectionStore#applySnapshot}),没消费就没台账,扫描没有可做的事; + * 可信建件的第二条路径(签名收据确认)不经过本类。

* *

三条 ack 纪律:

*
    @@ -44,6 +48,8 @@ import java.util.List; */ @Slf4j @Component +@org.springframework.boot.autoconfigure.condition.ConditionalOnExpression( + "!'${spring.rabbitmq.host:}'.trim().isEmpty()") public class FcAnswerConsumer { private final AnswerProjectionStore projectionStore;