是否可以使用 spring 云数据流 java rest 客户端获取所有流的列表?

Is it possible to get a list of all streams using the spring cloud dataflow java rest client?

我正在使用 spring 云数据流 java 休息客户端 (https://docs.spring.io/spring-cloud-dataflow/docs/current/api/) 并想用它来检索所有当前部署的流。

获取 StreamOperations 对象并从中获取流列表非常简单:

val template = DataFlowTemplate(<someUri>)
val streamOperations = template.streamOperations()
val streamDefinitionResources = streamOperations.list()

上面的streamDefinitionResources实际上是一个PagedModel<StreamDefinitionResource>,它使用2000的页面大小来保存结果的第一页。

但是,我没有看到任何方法来遍历所有页面以使用 java 其余客户端获取 所有 流(即没有分页通过 StreamOperationsStreamDefinitionResource 类).

可获得支持

是否可以仅使用 java rest 客户端获取所有流?我错过了什么吗?

总结

PagedModel<StreamDefinitionResource> 有一个 getNextLink() 方法,您可以使用该方法手动遍历结果的“下一页”。

详情

底层数据流 REST API 支持通过页码和大小请求参数进行分页,returns HAL responses 包括 _links 到下一页和上一页。

例如,给定此 HTTP 请求的 10 个流定义:

GET localhost:9393/streams/definitions?page=0&size=2

returns 以下回复:

{
  _embedded: {
    streamDefinitionResourceList: [
      {
        name: "ticktock1",
        dslText: "time | log",
        originalDslText: "time | log",
        status: "undeployed",
        description: "",
        statusDescription: "The app or group is known to the system, but is not currently deployed",
        _links: {
          self: {
            href: "http://localhost:9393/streams/definitions/ticktock1"
          }
        }
      },
      {
        name: "ticktock2",
        dslText: "time | log",
        originalDslText: "time | log",
        status: "undeployed",
        description: "",
        statusDescription: "The app or group is known to the system, but is not currently deployed",
        _links: {
          self: {
            href: "http://localhost:9393/streams/definitions/ticktock2"
          }
        }
      }
    ]
  },
  _links: {
    first: {
      href: "http://localhost:9393/streams/definitions?page=0&size=2"
    },
    self: {
      href: "http://localhost:9393/streams/definitions?page=0&size=2"
    },
    next: {
      href: "http://localhost:9393/streams/definitions?page=1&size=2"
    },
    last: {
      href: "http://localhost:9393/streams/definitions?page=4&size=2"
    }
  },
  page: {
    size: 2,
    totalElements: 10,
    totalPages: 5,
    number: 0
  }
}

Dataflow Java REST 客户端在提供 getNextLink() 方法的 PagedModel<StreamDefinitionResource> 响应中公开此 HAL 响应。

警告 1) 但是,当前的实现(如您所指出的)被硬编码为 2000 的页面大小。这意味着在您拥有超过 2000 个流定义之前,您不会看到此行为。

警告 2) 另一点需要注意的是 link 到“下一个”页面的遍历不会自动处理,您需要手动调用links URL 检索下一页。

假设 StreamOperations.list 接受了页面大小参数,代码可能如下所示:

int pageSize = 2;
PagedModel<StreamDefinitionResource> pageOfStreamDefs = streamOperations().list(pageSize);
pageOfStreamDefs.getNextLink()
    .ifPresent((link) ->  someFunctionToInvokeAndProcessNextPage(link.getHref());

有关 REST API 参数的更多详细信息,请参见 here