使用ActiveMQ

时间:2017-09-15 13:20:45

标签: spring spring-cloud-contract

我整个星期都在玩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.messaging.Message           在org.springframework.cloud.contract.verifier.messaging.stream.ContractVerifierHelper.convert(ContractVerifierStreamAutoConfiguration.java:59)           在org.springframework.cloud.contract.verifier.messaging.internal.ContractVerifierMessaging.receive(ContractVerifierMessaging.java:40)           在org.springframework.cloud.contract.verifier.tests.someconsumer.MessagingTest.validate_inviteContract(MessagingTest.java:27)

我可以从日志文件中判断出正在发送测试邮件,我的自定义MessageVerifier正在选择邮件。我错过了哪些步骤?

如果我这样定义我的MessageVerifier:

  

公共类ConsumerMessageVerifier实现MessageVerifier< ActiveMQTextMessage>

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

  

描述:   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'            - Bean方法' contractVerifierMessageExchange'在' ContractVerifierIntegrationConfiguration'未加载,因为@ConditionalOnMissingBean(types:org.springframework.cloud.contract.verifier.messaging.MessageVerifier; SearchStrategy:all)找到了bean' consumerMessageVerifier'            - Bean方法' contractVerifierMessageExchange' in' NoOpContractVerifierAutoConfiguration'未加载,因为@ConditionalOnMissingBean(types:org.springframework.cloud.contract.verifier.messaging.MessageVerifier; SearchStrategy:all)找到了bean' consumerMessageVerifier'            - Bean方法' contractVerifierMessageExchange'未加载,因为@ConditionalOnProperty(stubrunner.stream.enabled = true)在属性中发现了不同的值' stubrunner.stream.enabled'

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

  1. 我是否应该按上述方式对MessageVerifier进行资格认定?

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

  3. 谢谢!

1 个答案:

答案 0 :(得分:0)

MessageVerifier需要输入。您还需要ContractVerifierMessaging。您可以查看Spring Cloud Contract包:org.springframework.cloud.contract.verifier.messaging.amqporg.springframework.cloud.contract.verifier.messaging.stream‌​org.springframework.cloud.contract.verifier.messaging.camelorg.springframework.cloud.contract.verifier.messaging.integr‌​ation以获取样本。