是否可以使用 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 其余客户端获取 所有 流(即没有分页通过 StreamOperations
或 StreamDefinitionResource
类).
可获得支持
是否可以仅使用 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。
我正在使用 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 其余客户端获取 所有 流(即没有分页通过 StreamOperations
或 StreamDefinitionResource
类).
是否可以仅使用 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。