【发布时间】:2019-03-27 19:53:32
【问题描述】:
这个特定的部分在应用程序而不是 XML 中实现是有意义的,因为它在整个集群中是一个常量,而不是本地化到单个作业。
通过剖析 XSD,在我看来,int-kafka:outbound-channel-adapter 的 xml 构造了一个 KafkaProducerMessageHandler。
没有可见的方法来设置频道、主题或大多数其他属性。
注意潜在的反对者 - (咆哮)我已经使用 RTFM 一周了,并且比我开始时更加困惑。我对语言的选择已经从形容词到副词毕业,我开始从其他语言借词。答案可能就在里面。但如果是这样,它就不是普通人能找到的。 (吐槽)
XML 配置:
<int-kafka:outbound-channel-adapter id="kafkaOutboundChannelAdapter"
kafka-template="kafkaTemplate"
auto-startup="false"
channel="outbound-staging"
topic="foo"
sync="false"
message-key-expression="'bar'"
send-failure-channel="failures"
send-success-channel="successes"
partition-id-expression="2">
</int-kafka:outbound-channel-adapter>
如果是这样,那么我希望 java 配置看起来像这样:
@Bean
public KafkaProducerMessageHandler kafkaOutboundChannelAdapter () {
KafkaProducerMessageHandler result = new KafkaProducerMessageHandler(kafkaTemplate());
result.set????? (); // WTH?? No methods for most of the attributes?!!!
return result;
}
编辑:关于正在解决的高级问题的附加信息
作为一个更大项目的一部分,我正在尝试实现来自 https://docs.spring.io/spring-batch/4.0.x/reference/html/spring-batch-integration.html#remote-partitioning 的教科书示例,使用 Kafka 支持而不是 JMS 支持。
我相信最终的集成流程应该是这样的:
partitionHandler -> messingTemplate -> outbound-requests (DirectChannel) -> outbound-staging (KafkaProducerMessageHandler) -> kafka
kafka -> executionContainer (KafkaMessageListenerContainer) -> inboundKafkaRequests (KafkaMessageDrivenChannelAdapter) -> inbound-requests (DirectChannel) -> serviceActivator (StepExecutionRequestHandler)
serviceActivator (StepExecutionRequestHandler) -> 回复-staging (KafkaProducerMessageHandler) -> kafka
kafka -> replyContainer (KafkaMessageListenerContainer) -> inboundKafkaReplies (KafkaMessageDrivenChannelAdapter) -> inbound-replies (DirectChannel) -> partitionhandler
【问题讨论】:
标签: java spring spring-integration