【发布时间】:2019-12-21 22:12:08
【问题描述】:
我目前正在使用 Spring Cloud Contracts 开发 API 兼容性检查。我设置了文档中说的所有内容。但是我遇到了一个问题-java.lang.IllegalStateException: No consumer set up for topic [testSyncTopic]。该异常在KafkaStubMessages 类中引发。所以我认为这是与图书馆相关的问题。在我的项目中,我有两个独立的 Maven 项目。他们每个人都是消费者和生产者(单独的主题)。我的合同放在其他存储库中。
所以...我目前正在处理以下情况: 我们有 2 个模块 - 模块 A 和 B。模块 A 在主题 T1 和 T2 上向 Kafka 主题 t1 和 t2 发送消息,并从主题 T3 和 T4 接收消息 t3 和 t4。模块 B 从 T1 和 T2 接收并发送到 T3 和 T4。
所有消费者测试在每个模块中都通过。但是生产者测试最终会出现主题中提到的错误。
我怀疑这是由存根创建错误引起的。所以没有设置合适的监听器。
我尝试了不同的 kafka 配置,但我相信事实并非如此。我还检查了 Spring Cloud 合约配置,但一切似乎都运行良好。生成带有存根的正确 jar。不幸的是,谷歌在这件事上帮不上什么忙。
如果您需要任何信息来帮助我,请随时提出。 我现在正在努力几天,所以我很绝望,真的需要你的帮助。
编辑:添加堆栈跟踪和相关代码 sn-ps
堆栈跟踪:
java.lang.IllegalStateException: No consumer set up for topic [testSyncTopic]
at org.springframework.cloud.contract.verifier.messaging.kafka.Receiver.receive(KafkaStubMessages.java:110)
at org.springframework.cloud.contract.verifier.messaging.kafka.KafkaStubMessages.receive(KafkaStubMessages.java:80)
at org.springframework.cloud.contract.verifier.messaging.kafka.KafkaStubMessages.receive(KafkaStubMessages.java:42)
at com.comarch.fsm.dispatcher.rest.ContractBaseTest.setup(ContractBaseTest.groovy:56)
基础测试类配置:
@SpringBootTest
@EmbeddedKafka(bootstrapServersProperty = "spring.kafka.bootstrap-servers", brokerProperties = ["log.dir=target/embedded-kafka"])
@AutoConfigureStubRunner
abstract class BaseTestConfig extends Specification {
}
我的合同定义:
Pattern customDateTime() {
Pattern.compile('([0-9]{4})-(1[0-2]|0[1-9])-(0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])Z')
}
Contract.make {
label("sync")
input {
triggeredBy("sync()")
}
outputMessage {
sentTo("testSyncTopic")
body(
syncStart: $(customDateTime())
)
}
}
ContractBaseTest 类:
abstract class ContractBaseTest extends BaseTestConfig {
@Autowired
private KafkaService kafkaService;
def synchronizeData() {
kafkaService.sendKafkaMessage("testSyncTopic", null, new SyncDto(new Date()));
}
}
【问题讨论】:
-
描述问题不会让任何人帮你解决它。请添加所有相关配置/代码sn-p/异常跟踪...
-
@tmarwen 我更新了问题。我相信现在有足够的信息可以帮助我。
标签: java spring apache-kafka spring-kafka spring-cloud-contract