0

我已经注册了一个AsyncHandler并且还添加了一个success-channel到 SQS 出站流。有success-channel一个int:logging-channel-adapter端点。但是,我无法看到来自此适配器的任何日志。AsyncHandler能够接收回,但success-channel. 在SqsMessageHandler我看到我们在方法中设置了一个输出通道obtainAsyncHandler,但我没有在success-channel任何地方看到设置。我错过了什么吗?我更喜欢使用成功和失败通道而不是 AsyncHandler 回调 Impl 以避免在我的类中包含 AWS 特定代码。

另外 my <int-aws:sqs-outbound-channel-adapter>位于<int:chain>没有输出通道的 a 内,因为发送消息时流程结束。

编辑 - 添加配置 这是我可以让它记录回调的唯一方法。

    <int:channel id="chainChannel" />
    <int:channel id="successChannel" />
    <bean class="ServiceTransformer" id="serviceTransformer" />
    <int:chain input-channel="serviceChannel" id="sendToServiceSqsChain" output-channel="chainChannel">
        <int:transformer ref="serviceTransformer" method="transform" />
        <int:header-filter header-names="config" />
        <int-aws:sqs-outbound-channel-adapter sqs="amazonSQS" queue="some-queue" async-handler="sqsPublishCallbackHandler" success-channel="successChannel"/>
    </int:chain>

    <int:logging-channel-adapter log-full-message="true" channel="chainChannel" />

在这里,我可以在链(出站通道)和 sqs-outbound(成功通道)中使用相同的通道

无法让它像下面这样工作:

        <int:channel id="successChannel" />
        <bean class="ServiceTransformer" id="serviceTransformer" />
        <int:chain input-channel="serviceChannel" id="sendToServiceSqsChain" >
            <int:transformer ref="serviceTransformer" method="transform" />
            <int:header-filter header-names="config" />
            <int-aws:sqs-outbound-channel-adapter sqs="amazonSQS" queue="some-queue" async-handler="sqsPublishCallbackHandler" success-channel="successChannel"/>
        </int:chain>
    
        <int:logging-channel-adapter log-full-message="true" channel="successChannel" />
4

1 回答 1

1

<int-aws:sqs-outbound-channel-adapter>组件是单向的,因此没有outputChannel选项暴露。但是目标类是AbstractMessageProducingHandler. outputChannel为了避免代码重复,我们在内部重用现有的AsyncHandler.

在 XML 解析器中,我们只是将一个重新映射到另一个:

IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "success-channel", "outputChannel");

您可能在日志中看不到任何内容,因为您需要分别为适当的类别和级别调整日志记录配置。

更新

根据我的测试,这绝对不可能在<chain>. 这<int-aws:sqs-outbound-channel-adapter>必须在<chain>.

考虑更多地配置 Java DSL:https ://docs.spring.io/spring-integration/docs/5.3.2.RELEASE/reference/html/dsl.html#java-dsl 。

于 2020-08-24T20:14:20.663 回答