【问题标题】:spring cloud contract POCSpring Cloud 合约 POC
【发布时间】:2020-01-18 21:40:36
【问题描述】:

我正在尝试为我的团队创建一个示例 POC 以使用 Spring 云合同。

我能够获得生产者方面的 Green-Pass,但在消费者方面,我不断收到
No stubs or contracts were found for [com.datson:cloudcontract-producer:+:stubs] and the switch to fail on no stubs was set. 合同存在。

我尝试了 Spring Cloud 官方文档中描述的几个用户案例。

@AutoConfigureStubRunner(ids = "com.datson:cloudcontract-producer:+:8080", stubsMode = StubRunnerProperties.StubsMode.LOCAL)

@AutoConfigureStubRunner(ids = "com.datson:cloudcontract-producer:+:stubs"

https://cloud.spring.io/spring-cloud-contract/reference/html/getting-started.html#getting-started-cdc-consumer-run

这里是消费者代码示例:https://github.com/Yayan89/springboot-config-server/tree/master/cloudcontract-consumer
这里是生产者代码示例:https://github.com/Yayan89/springboot-config-server/tree/master/cloudcontract-producer

可能是我错过了一些愚蠢的事情。

【问题讨论】:

标签: spring-cloud-contract


【解决方案1】:

在提供的示例中,您需要在本地 m2 中安装一个 jar 以从消费者端获取它(请阅读有关如何直接从驱动器获取合约的文档)。如果你检查这个示例和 gradle build https://github.com/spring-cloud-samples/spring-cloud-contract-samples/blob/master/scripts/runGradleBuilds.sh#L37 你会看到你应该像这样运行某事

./gradlew build publishToMavenLocal

假设你有 maven-publish 插件或

./gradlew build install

假设你有一个maven 插件

【讨论】:

    【解决方案2】:

    感谢@MarcinGrejszzak 的回复,我只想确保我理解正确的一件事。生产者需要发布 mavenlocal (.m2) 以便消费者能够构建它。我的说法正确吗?

    id 'maven-publish' 我们需要在 gradle/mvn build 中添加我们的生产者

    implementation("com.datson:cloudcontract-producer:+:stubs") {
            transitive = false
        }
    

    我的代码现在可以使用

    @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK)
    @AutoConfigureStubRunner(
        stubsMode = StubRunnerProperties.StubsMode.LOCAL,
        ids = "com.datson:cloudcontract-producer:+:stubs:0.0.1:8090"
    )
    @AutoConfigureMockMvc
    public class LoanApplicationServiceTest {
    
    @Autowired
    MockMvc mockMvc;
    
    @Test
    public void given_WhenPassEvenNumberInQueryParam_ThenReturnEven() throws Exception {
    
        mockMvc.perform(MockMvcRequestBuilders.put("/fraudcheck")
            .contentType(MediaType.APPLICATION_JSON))
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andExpect(MockMvcResultMatchers.content().string("Even"));
    }}
    

    【讨论】:

    • 您不需要将其添加到类路径中。如果你这样做,你可以将模式设置为 CLASSPATH
    • @MarcinGrzejszczak 只是一个快速相关的问题 在我们的架构中,我们的后端将从我们的 Artifactory 获取 jar-stubs 文件(如果我是正确的,它包含 json)。在我们的前端,他们正在使用 Angular,他们将如何与我们的合约进行通信?我从cloud.spring.io/spring-cloud-contract/reference/html/… 阅读了文档,但它使用生产者作为 node.js。
    • 制作人是谁并不重要。如果 jar 在工件中,他们可以使用 docker 映像来获取存根并在给定的预定义端口上运行它们
    猜你喜欢
    • 2017-07-23
    • 1970-01-01
    • 2017-05-03
    • 2018-04-03
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    相关资源
    最近更新 更多