1

想象一下,您有一个带有入站 HTTP 接口(使用 HTTP 是一项要求)的应用程序(我们称之为 B )。您将来会从其他几个不同的应用程序中调用它,但目前您只想开发一个客户端(我们称之为 A)。所以在A中,有一个出站HTTP网关:

A (outbound gateway) ---[HTTP]---> (inbound gateway) B

是否可以共享代码,例如 HTTP API 定义,如路径(例如“/hello”)、方法(GET、POST、PUT ...),也许是这两个应用程序之间的参数/它们的类型/响应?如果是,如何?

我想使用Java DSL,但我看到了Http.inboundGateway("..")并且Http.outboundGateway("..")完全不同(例如类型),所以我不确定。理想情况下,我可以有类似的东西:

  @Bean
  public IntegrationFlow inbound() {
    return IntegrationFlows.from(apiDefinition)...
                           .get();
    ...
    ...

  @Bean
  public IntegrationFlow outbound() {
    return IntegrationFlows.from(somehwere)...
                           .handle(with(apiDefinition))
                           .get();

Api 定义可以想象如下(伪代码):

apiDefinition =
  method: GET
  path:   /items/{id}
  parameters:
    id: string
  response: item
4

2 回答 2

0

好吧,这听起来更像是您不想在您的客户端中通过 HTTP 进行调用并能够直接访问业务逻辑。在这种情况下,Spring Integration 中存在的最好的东西就是MessageChannel抽象。因此,无论输入端点是什么(HTTP、JMS、Apache Kafka、JDBC 等),您始终可以将它们指向同一个通道,其中某个服务激活器是该通道的订阅者,以执行所需的业务逻辑。

因此,要在当前客户端中传递 HTTP 调用,您只需要引入 aMessageChannel作为某些IntegationFlow业务逻辑的输入。HTTP 入站流将使用.channel(myBusinessLogicChannel). 你的出站在它的逻辑上也会做同样的事情。这样,您将拥有两个用于相同 API 的客户端:一个通过 HTTP,另一个直接。

我还可以建议研究什么是消息传递网关,作为从客户端角度设计具有少量消息交互的高级 API 的替代方案。结果将是相同的:HTTP 入站流可以调用该网关。并且可以在其他终端用户代码中直接调用。

查看更多关于通道和网关的文档:

https://docs.spring.io/spring-integration/docs/current/reference/html/messaging-endpoints.html#gateway

于 2021-06-03T15:36:22.187 回答
0

我会在 Spring Boot 上运行 A。只是一种常规的 MVC 方法。如果您想在将来添加一个 GUI 以使其具有前端,即使现在您只需要一个 API,它也可以使其具有可扩展性。然后您可以设置您的端点以返回您想要的任何数据作为SuccessResponse包含 aHashMap或您想要的任何数据结构Serialized并作为 HTTP 响应传回。如果您想了解它的外观,可以查看我关于 Spring Boot 的一些问题。这里还有 Baeldung 的 Spring Boot 文档。这里还有一个 spring boot 项目启动器,它可以让您设置整个项目,包括依赖项、构建自动化工具等。

于 2021-06-04T00:50:36.467 回答