使用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
答案 0 :(得分:0)
您似乎没有显示完整的配置。
网关期待回复,但kafkaMessageHandler
没有回复(除非模板是ReplyingKafkaTemplate
)并且会丢失replyChannel
标题。
所以,大概是你试图从其他地方发送回复。
如果您期望请求/回复语义;使用new outbound gateway。
模板必须是ReplyingKafkaTemplate
。