带有 Spring Cloud Contract 和测试容器的 Spring Cloud Stream kafka

问题描述 投票:0回答:1

我正在使用 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-stream spring-test spring-cloud-stream-binder-kafka spring-cloud-contract
1个回答
0
投票

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"}"
© www.soinside.com 2019 - 2024. All rights reserved.