Spring Cloud Contract - 没有命名的bean'验证'可得到

时间:2017-12-12 08:16:33

标签: spring-boot spring-cloud spring-cloud-contract

我有一个运行spring cloud合约的春季启动应用程序

messageTest.groovy

Contract.make {
    label 'some_label'
    input {
        triggeredBy('messageTriggered()')
    }
    outputMessage {
        sentTo 'verifications'
        body 'foo'
        headers {
            messagingContentType(applicationJson())
        }
    }
}

当我查看build文件夹中生成的测试时,我的测试失败了

ContractVerifierMessage response = contractVerifierMessaging.receive("verifications");

上面这一行不断抛出

的例外
No bean named 'verifications' available

我做错了什么?

它看起来像注入SpringIntegrationStubMessages而不是StreamStubMessages ...

我使用Spring Boot 1.5.8和spring cloud starter kafka

compile 'org.springframework.cloud:spring-cloud-starter-stream-kafka'

2 个答案:

答案 0 :(得分:0)

如果在类路径上同时具有spring集成和流,并且由于某些原因未提取流,则尝试将stubrunner.integration.enabled设置为false。这样才能选择Stream。

答案 1 :(得分:0)

我猜想您需要MessageVerifier Bean作为StreamStubMessages类的实例。它是有条件的,其实例取决于类路径的内容。您可以尝试通过显式实例化该问题来解决该问题:

  //services.yaml
Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler:
        arguments:

            - !service { class: PDO, factory: 'database_connection:getWrappedConnection' }
            - { lock_mode: 1 }
//framework.yaml 
session:
        enabled: true
        gc_maxlifetime: 36000 #10 hours custom session time
        handler_id: 'Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler'
        save_path: '%kernel.project_dir%/var/sessions/%kernel.environment%'
        cookie_secure: auto
        cookie_samesite: lax


//database table
CREATE TABLE `sessions` (
    `sess_id` VARCHAR(128) NOT NULL PRIMARY KEY,
    `sess_data` BLOB NOT NULL,
    `sess_time` INTEGER UNSIGNED NOT NULL,
    `sess_lifetime` MEDIUMINT NOT NULL
) COLLATE utf8_bin, ENGINE = InnoDB;

它最终会出现一个找不到类def的异常,该异常将引导您摆脱依赖关系。

我有类似的问题,但就我而言,有ActiveMQ代替了Kafka(没有弹簧集成或弹簧流)。结果,可用的MessageVerifier似乎都不适合。对我来说,MessageVerifier的以下简约实现(这不是ActiveMQ的通用解决方案)可以完成这项工作:

@Bean
MessageVerifier<Message<?>> activeMqContractVerifier(ApplicationContext applicationContext) {
    return new StreamStubMessages(applicationContext);
}