AWS 异步响应路由到 sqs-outbound-channel-adapter 的成功通道
AWS Async Response routing to success-channel for sqs-outbound-channel-adapter
我已经注册了一个 AsyncHandler
并且还添加了一个 success-channel
到 SQS 出站流程。 success-channel
有一个 int:logging-channel-adapter
端点。但是我看不到来自该适配器的任何日志。 AsyncHandler
能够收到 回调 但 success-channel
什么也没有。
在 SqsMessageHandler
中,我看到我们在 obtainAsyncHandler
方法中设置了一个 输出通道 ,但我没有看到success-channel
设置在任何地方。我错过了什么吗?
我更喜欢使用成功和失败通道而不是 AsyncHandler 回调 Impl,以避免在我的 类.
中包含 AWS 特定代码
另外,我的 <int-aws:sqs-outbound-channel-adapter>
在没有输出通道的 <int:chain>
中,因为消息发送后流程结束。
编辑 - 添加配置
这是我可以让它记录回调的唯一方法。
<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" />
<int-aws:sqs-outbound-channel-adapter>
组件是one-way,因此没有outputChannel
选项公开。然而,目标 class 是 AbstractMessageProducingHandler
。为了避免代码重复,我们在内部为 AsyncHandler
.
重用现有的 outputChannel
在 XML 解析器中,我们只是将一个重新映射到另一个:
IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "success-channel", "outputChannel");
您可能在日志中看不到任何内容,因为您需要针对适当的类别和级别分别调整日志记录配置。
更新
根据我的测试,绝对不可能在 <chain>
中使用 XML DSL 配置这样的组件。 <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.
我已经注册了一个 AsyncHandler
并且还添加了一个 success-channel
到 SQS 出站流程。 success-channel
有一个 int:logging-channel-adapter
端点。但是我看不到来自该适配器的任何日志。 AsyncHandler
能够收到 回调 但 success-channel
什么也没有。
在 SqsMessageHandler
中,我看到我们在 obtainAsyncHandler
方法中设置了一个 输出通道 ,但我没有看到success-channel
设置在任何地方。我错过了什么吗?
我更喜欢使用成功和失败通道而不是 AsyncHandler 回调 Impl,以避免在我的 类.
另外,我的 <int-aws:sqs-outbound-channel-adapter>
在没有输出通道的 <int:chain>
中,因为消息发送后流程结束。
编辑 - 添加配置 这是我可以让它记录回调的唯一方法。
<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" />
<int-aws:sqs-outbound-channel-adapter>
组件是one-way,因此没有outputChannel
选项公开。然而,目标 class 是 AbstractMessageProducingHandler
。为了避免代码重复,我们在内部为 AsyncHandler
.
outputChannel
在 XML 解析器中,我们只是将一个重新映射到另一个:
IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "success-channel", "outputChannel");
您可能在日志中看不到任何内容,因为您需要针对适当的类别和级别分别调整日志记录配置。
更新
根据我的测试,绝对不可能在 <chain>
中使用 XML DSL 配置这样的组件。 <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.