将@Gateway与Spring-Integration-Kafka一起使用

时间:2018-03-19 22:00:22

标签: java spring apache-kafka spring-integration

使用Spring-Integration-Kafka我们仍然可以使用@MessagingGateway和@Gateway。

我目前的代码如下:

@MessagingGateway
public interface OrderGateway {
 @Gateway(requestChannel = "requestChannel", replyChannel = "replyChannel",headers = {@GatewayHeader(name = "kafka_topic", value ="requestTopic"))
  Order order(Item item)
}

在我的Spring Spring配置上:

@Bean
@ServiceActivator(inputChannel = "requestChannel")
public MessageHandler kafkaMessageHandler(KafkaTemplate kafkaTemplate) {
    KafkaProducerMessageHandler<String, String> messageHandler = new KafkaProducerMessageHandler<>(kafkaTemplate);
    messageHandler.setMessageKeyExpression(new LiteralExpression("spring-integration-kafka"));
    messageHandler.setTopicExpression(new SpelExpressionParser().parseExpression("headers.kafka_topic"));
    return messageHandler;
}

有了这个设置我得到并且错误说:

by: org.springframework.messaging.core.DestinationResolutionException: no output-channel or replyChannel header available  

1 个答案:

答案 0 :(得分:0)

您似乎没有显示完整的配置。

网关期待回复,但kafkaMessageHandler没有回复(除非模板是ReplyingKafkaTemplate)并且会丢失replyChannel标题。

所以,大概是你试图从其他地方发送回复。

如果您期望请求/回复语义;使用new outbound gateway

模板必须是ReplyingKafkaTemplate