0

我整个星期都在玩 Spring Cloud Contract。我能够使用 Spring Cloud Stream 创建一个生产者和消费者应用程序来进行消息传递。

我正在尝试重新设计生产者端以使用 ActiveMQ(带有虚拟主题)。我想我快到了。我已经编写了自己的 MessageVerifier 并将其注入到测试的基类中。现在我得到:

测试运行:1,失败:0,错误:1,跳过:0,经过的时间:2.535 秒 <<< 失败!- 在 org.springframework.cloud.contract.verifier.tests.someconsumer.MessagingTest validate_inviteContract(org.springframework.cloud.contract.verifier.tests.someconsumer.MessagingTest) 经过时间:0.802 秒 <<< 错误!java.lang.ClassCastException: org.apache.activemq.command.ActiveMQTextMessage 不能在 org.springframework.cloud.contract.verifier.messaging.stream.ContractVerifierHelper.convert(ContractVerifierStreamAutoConfiguration.java:59 ) 在 org.springframework.cloud.contract.verifier.tests.someconsumer.MessagingTest 的 org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging.receive(ContractVerifierMessaging.java:40)。

我可以从日志文件中得知正在发送测试消息,并且我的自定义 MessageVerifier 正在接收消息。我错过了哪些步骤?

如果我像这样定义我的 MessageVerifier:

公共类 ConsumerMessageVerifier 实现 MessageVerifier<ActiveMQTextMessage>

然后解决了 ClassCastException,但导致其他问题“应用程序无法启动”错误:

说明:org.springframework.cloud.contract.verifier.messaging.integration.ContractVerifierIntegrationConfiguration 中方法 contractVerifierMessaging 的参数 0 需要找不到类型为“org.springframework.cloud.contract.verifier.messaging.MessageVerifier”的 bean。- Bean 方法 'contractVerifierMessageExchange' 未加载,因为 @ConditionalOnClass 未找到所需的类 'org.springframework.amqp.rabbit.core.RabbitTemplate' - Bean 方法 'contractVerifierMessageExchange' 未加载,因为 @ConditionalOnClass 未找到所需的类 'org.apache。 camel.Message' - 'ContractVerifierIntegrationConfiguration' 中的 Bean 方法 'contractVerifierMessageExchange' 未加载,因为 @ConditionalOnMissingBean(类型:org.springframework. cloud.contract.verifier.messaging.MessageVerifier;SearchStrategy: all) found bean 'consumerMessageVerifier' - 'NoOpContractVerifierAutoConfiguration' 中的 Bean 方法 'contractVerifierMessageExchange' 未加载,因为 @ConditionalOnMissingBean(类型:org.springframework.cloud.contract.verifier.messaging.MessageVerifier;SearchStrategy: all)找到了 bean 'consumerMessageVerifier' - 未加载 Bean 方法“contractVerifierMessageExchange”,因为 @ConditionalOnProperty (stubrunner.stream.enabled=true) 在属性“stubrunner.stream.enabled”中发现了不同的值

所以,我不确定这是否是正确的道路。所以我的问题是:

  1. 我应该像上面那样限定 MessageVerifier 吗?

  2. 如果是这样,解决“应用程序无法启动”错误需要哪些步骤?

谢谢!

4

1 回答 1

0
于 2017-09-18T14:59:00.757 回答