7.3. 在 Service Registry 中注册模式
在以适当的格式(如 Apache Avro)定义了模式后,您可以将模式添加到 Service Registry 中。
您可以使用以下方法添加模式:
- Service Registry web 控制台
- 使用 Service Registry REST API 的 curl 命令
- Service Registry 提供的 Maven 插件
- 添加至客户端代码中的 schema 配置
在注册了 schema 之前,客户端应用程序无法使用 Service Registry。
Service Registry web 控制台
安装 Service Registry 后,您可以从 ui 端点连接到 web 控制台:
http://MY-REGISTRY-URL/ui
在控制台中,您可以添加、查看和配置模式。您还可以创建阻止将无效内容添加到 registry 的规则。
curl 命令示例
curl -X POST -H "Content-type: application/json; artifactType=AVRO" \
-H "X-Registry-ArtifactId: share-price" \
--data '{
"type":"record",
"name":"price",
"namespace":"com.example",
"fields":[{"name":"symbol","type":"string"},
{"name":"price","type":"string"}]}'
https://my-cluster-my-registry-my-project.example.com/apis/registry/v2/groups/my-group/artifacts -s
- 简单的 Avro 模式工件。
- 公开 Service Registry 的 OpenShift 路由名称。
Maven 插件示例
<plugin>
<groupId>io.apicurio</groupId>
<artifactId>apicurio-registry-maven-plugin</artifactId>
<version>${apicurio.version}</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>register</goal>
</goals>
<configuration>
<registryUrl>http://REGISTRY-URL/apis/registry/v2</registryUrl>
<artifacts>
<artifact>
<groupId>TestGroup</groupId>
<artifactId>FullNameRecord</artifactId>
<file>${project.basedir}/src/main/resources/schemas/record.avsc</file>
<ifExists>FAIL</ifExists>
</artifact>
<artifact>
<groupId>TestGroup</groupId>
<artifactId>ExampleAPI</artifactId>
<type>GRAPHQL</type>
<file>${project.basedir}/src/main/resources/apis/example.graphql</file>
<ifExists>RETURN_OR_UPDATE</ifExists>
<canonicalize>true</canonicalize>
</artifact>
</artifacts>
</configuration>
</execution>
</executions>
</plugin>
-
指定
register作为将架构工件上传到 registry 的执行目标。 -
使用
../apis/registry/v2端点指定 Service Registry URL。 - 指定 Service Registry 工件组 ID。
- 您可以使用指定的组 ID、工件 ID 和位置上传多个工件。
使用制作者客户端示例进行配置
String registryUrl_node1 = PropertiesUtil.property(clientProperties, "registry.url.node1",
"https://my-cluster-service-registry-myproject.example.com/apis/registry/v2");
try (RegistryService service = RegistryClient.create(registryUrl_node1)) {
String artifactId = ApplicationImpl.INPUT_TOPIC + "-value";
try {
service.getArtifactMetaData(artifactId);
} catch (WebApplicationException e) {
CompletionStage <ArtifactMetaData> csa = service.createArtifact(
"AVRO",
artifactId,
new ByteArrayInputStream(LogInput.SCHEMA$.toString().getBytes())
);
csa.toCompletableFuture().get();
}
}
- 您可以针对多个 URL 节点注册属性。
- 根据工件 ID 检查架构是否已存在。