我正在使用 Spring Cloud Stream 和 Spring Cloud contract 进行集成测试,我正在使用 TestChannelBinderConfiguration 并且它正在运行。现在我已经在我的消费者端添加了 TestsContainer Kafka,并在示例中添加了 MessageVerifierSender 所需的配置(示例来自@Marcin Grzejszczak)省略了完整代码:
@Bean
MessageVerifierSender<Message<?>> standaloneMessageVerifier(KafkaTemplate kafkaTemplate) {
return new MessageVerifierSender<>() {
@Override
public void send(Message<?> message, String destination, @Nullable YamlContract contract) {
}
@Override
public <T> void send(T payload, Map<String, Object> headers, String destination, @Nullable YamlContract contract) {
Map<String, Object> newHeaders = headers != null ? new HashMap<>(headers) : new HashMap<>();
newHeaders.put(KafkaHeaders.TOPIC, destination);
kafkaTemplate.send(MessageBuilder.createMessage(payload, new MessageHeaders(newHeaders)));
}
};
}
现在在我的消费者端,在 StubFinder.trigger 之后我的代码没有被调用。似乎没有收到任何事件以在收到事件后触发我的代码。
我的问题是,如何使用 Spring Cloud Stream 解决这个问题?我错过了什么吗?
我在这里遵循了这个示例,但就我而言,它是 Spring Cloud Stream 而不是 Spring For Kafka,如下例所示:
https://github.com/spring-cloud-samples/spring-cloud-contract-samples/tree/main/consumer_kafka_middleware 和这里https://github.com/spring-cloud-samples/spring-cloud -contract-samples/tree/main/producer_kafka_middleware
Spring Cloud Contract不支持
org.springframework.messaging.support.MessageBuilder
创建org.springframework.messaging.Message
,因为jayway.jsonpath不支持创建的json格式(我猜你用的是json)。如果您使用的是 KafkaTemplate,则可以使用 org.apache.kafka.clients.producer.ProducerRecord
类来发送消息。
解析后的json还是
"{\"message\": \"value\"}"
而jayway.jsonpath只支持
"{"message": "value"}"