我有一个运行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'
答案 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);
}