我有以下简化的spring集成流程:
int-ws:inbound-gateway ----> int:transformer ----> int-kafka:outbound-channel-adapter
基本上:
int-ws:inbound-gateway
input
频道(第一个--->
)inputToKafka
频道(第二个--->
)int-kafka:outbound-channel-adapter
将邮件推送到kafka主题 Web服务操作具有请求和响应有效负载
请求有效负载是我正在转换为JSON消息的
我希望在int-kafka:outbound-channel-adapter
我该怎么做?
目前,当我调用Web服务时,一切都按预期工作,但我必须在reply-timeout
上设置int-ws:inbound-gateway
,以便它不会挂起。当我这样做时,我只是在SOAPUI上得到一个空响应。
我理解Gateway behavior when no response arrives部分中的概念 - 但在我的情况下,我确实想要生成回复。
这是我的集成上下文(没有kafka代理配置等):
<int-ws:inbound-gateway id="ws-inbound-gateway" request-channel="input"
marshaller="marshaller" unmarshaller="marshaller" reply-timeout="100"/>
<int:channel id="input"/>
<int:transformer input-channel="input" output-channel="inputToKafka" method="transform">
<bean class="com.test.InputToJSONTransformer"/>
</int:transformer>
<int:channel id="inputToKafka"/>
<int-kafka:outbound-channel-adapter kafka-producer-context-ref="kafkaProducerContext"
auto-startup="true"
channel="inputToKafka"
order="1">
</int-kafka:outbound-channel-adapter>
答案 0 :(得分:2)
更改
<int:channel id="inputToKafka"/>
到
<int:publish-subscribe-channel id="inputToKafka"/>
向频道添加第二个订阅者。
<service-activator input-channel="inputToKafka" ... order="2" />
服务生成响应的位置;成功发送到kafka后会调用它。
不要包含output-channel
;该框架将负责将服务输出路由回ws网关。
答案 1 :(得分:1)
您期望从Kafka出站渠道适配器获得什么样的响应,请记住它是Adapter
而不是Gateway
然而,您可以引入另一个组件ServiceActivator
现在您的变换器会输出到此频道,输入频道为sendToInputToKafka
。
您的&#39; ServiceActivator&#39;应该有@Autowire MessageChannel inputToKafka
并且应该以编程方式手动向此频道发送消息。
发送该消息后,您将构建所需的响应作为ServiceActivator
的返回类型和对ws gateway
的回复