当前位置: 首页 > 知识库问答 >
问题:

Spring云合同与Spring AMQP

邓阳炎
2023-03-14

到目前为止,我已经发现,通过在contract中定义“TriggeredBy”,生成的测试将调用那里提供的方法,因此我们将需要提供该方法在TestBase中执行的操作的实际实现。另一个是“outputMessage”,在这里我们可以验证之前的方法调用是否正确地生成了发送到某个交换的消息体。

资料来源:文件和样本

我的问题是,有没有办法从契约中产生输入消息,而不是触发自己的自定义方法?文档中的Spring Integration或Spring Cloud Stream示例可能与此类似:

Contract.make {
    name("Book Success")
    label("book_success")
    input {
        messageFrom 'input.exchange.and.maybe.route'
        messageHeaders {
            header('contentType': 'application/json')
            header('otherMessageHeader': '1')
        }
        messageBody ([
                bookData: someData
        ])
    }
    outputMessage {
        sentTo 'output.exchange.and.maybe.route'
        headers {
            header('contentType': 'application/json')
            header('otherMessageHeader': '2')
        }
        body([
                bookResult: true
        ])
    }
}

在使用spring cloud contract记录和测试rest api服务之后,如果可能的话,我希望通过在基于事件的服务的contract文件中定义输入和预期输出来保持一致。

共有1个答案

濮阳宁
2023-03-14

不要紧,实际上它已经被支持了。由于未知的原因,“Stub Runner Spring AMQP”中的文档没有像前面的其他示例一样列出该场景。

下面是我的工作方式:

    Contract.make {
        name("Amqp Contract")
        label("amqp_contract")
        input {
            messageFrom 'my.exchange'
            messageHeaders {
                header('contentType': 'text/plain')
                header('amqp_receivedRoutingKey' : 'my.routing.key')
            }
            messageBody(file('request.json'))
        }
        outputMessage {
            sentTo 'your.exchange'
            headers {
                header('contentType': 'text/plain')
                header('amqp_receivedRoutingKey' : 'your.routing.key')
            }
            body(file('response.json'))
        }
    }

这将创建一个测试,该测试将基于“My.Exchange”和“My.Routing.Key”调用侦听器,从而触发处理程序方法。然后,它将在RabbitTemplate调用“your.exchange”时捕获消息和路由密钥。

    verify(this.rabbitTemplate, atLeastOnce()).send(eq(destination), routingKeyCaptor.capture(),
            messageCaptor.capture(), any(CorrelationData.class));
 类似资料:
  • 我能够收到生产者端的绿色通行证,但在消费者端,我一直得到 合同是存在的。 我尝试了几个用户案例,如官方spring cloud文档中描述的。 https://cloud.spring.io/spring-cloud-contract/reference/html/gett-started.html#gett-started-cdc-consumer-run 以下是使用者代码示例:https://g

  • 使用Spring Cloud Dalston,我们构建了一个代理服务,当然使用Zuul。我现在正在尝试添加Spring Cloud合约测试,以从合约遵守的角度验证我们的代理服务按预期工作。奇怪的是,我可以发送请求并收到200状态代码,但预期的响应正文、内容类型标头等为空,因此我的测试失败了。 对于使用Zuul功能的测试服务,是否有Spring Cloud合同文档中未指定的其他配置?

  • 我有一个简单的项目Spring boot项目。它包含一个基于Jersey的控制器:@Path(“persons”)@products(MediaType.APPLICATION_JSON)公共类PersonsController{ 它返回预期的json响应(网址:http://localhost:PORT/人员): 我的目标是为这个控制器添加Spring云契约测试。我已经添加了所有必需的mvn配置

  • 我正在尝试将Spring Cloud Contract应用于使用Spring WebFlux构建的反应API。基本上能够以以下方式从API发送通量和接收响应通量: 但是,我在网上或文档中找不到关于我是否可以使用Spring Cloud Contract实现这一点的信息。 甚至有可能为此写一份合同吗?它是否能够提供wiremock并生成适当的JUnit测试?

  • 想要改进这个问题吗?更新问题,以便通过编辑这篇文章用事实和引用来回答。 最初的关闭原因未得到解决 我正在尝试了解PACT和Spring Cloud合同之间更好的工具来实施消费者驱动程序合同测试。我没有找到任何明确的例子来找到优缺点。 我想实现CDCT,我在项目中不使用Spring。根据我的理解,我认为PACT是很好的选择。 欢迎任何信息或建议。谢谢你。

  • 我一直使用Zuul作为边缘服务和API网关。最近我注意到Spring云平台发布了Spring云网关。这两个网关有什么区别?为什么Zuul没有扩展到支持S-C-Gateway中的功能?一个新图书馆的驱动因素是什么?应该在什么时候使用?