Schema注册表客户端

与模式注册表服务器交互的客户端抽象是SchemaRegistryClient接口,具有以下结构:

public interface SchemaRegistryClient {

	SchemaRegistrationResponse register(String subject, String format, String schema);

	String fetch(SchemaReference schemaReference);

	String fetch(Integer id);

}

Spring Cloud Stream提供了开箱即用的实现,用于与其自己的模式服务器交互,以及与Confluent Schema注册表进行交互。

可以使用@EnableSchemaRegistryClient配置Spring Cloud Stream模式注册表的客户端,如下所示:

  @EnableBinding(Sink.class)
@SpringBootApplication
@EnableSchemaRegistryClient
public static class AvroSinkApplication {
...
}
注意

优化了默认转换器,以缓存来自远程服务器的模式,而且还会非常昂贵的parse()toString()方法。因此,它使用不缓存响应的DefaultSchemaRegistryClient。如果您打算直接在代码上使用客户端,您可以请求一个也缓存要创建的响应的bean。为此,只需将属性spring.cloud.stream.schemaRegistryClient.cached=true添加到应用程序属性中即可。

Schema注册表客户端属性

Schema注册表客户端支持以下属性:

spring.cloud.stream.schemaRegistryClient.endpoint

模式服务器的位置。在设置时使用完整的URL,包括协议(httphttps),端口和上下文路径。

默认

http://localhost:8990/

spring.cloud.stream.schemaRegistryClient.cached

客户端是否应缓存模式服务器响应。通常设置为false,因为缓存发生在消息转换器中。使用模式注册表客户端的客户端应将其设置为true

默认

true

Avro Schema注册表客户端消息转换器

对于在应用程序上下文中注册了SchemaRegistryClient bean的Spring Boot应用程序,Spring Cloud Stream将自动配置使用模式注册表客户端进行模式管理的Apache Avro消息转换器。这简化了模式演进,因为接收消息的应用程序可以轻松访问可与自己的读取器模式进行协调的写入器模式。

对于出站邮件,如果频道的内容类型设置为application/*+avroMessageConverter将被激活,例如:

spring.cloud.stream.bindings.output.contentType=application/*+avro

在出站转换期间,消息转换器将尝试基于其类型推断出站消息的模式,并使用SchemaRegistryClient根据有效载荷类型将其注册到主题。如果已经找到相同的模式,那么将会检索对它的引用。如果没有,则将注册模式并提供新的版本号。该消息将使用application/[prefix].[subject].v[version]+avro的方案contentType头发送,其中prefix是可配置的,并且从有效载荷类型推导出subject

例如,类型为User的消息可以作为内容类型为application/vnd.user.v2+avro的二进制有效载荷发送,其中user是主题,2是版本号。

当接收到消息时,转换器将从传入消息的头部推断出模式引用,并尝试检索它。该模式将在反序列化过程中用作写入器模式。

Avro Schema注册表消息转换器属性

如果您已通过设置spring.cloud.stream.bindings.output.contentType=application/*+avro启用基于Avro的模式注册表客户端,则可以使用以下属性自定义注册的行为。

spring.cloud.stream.schema.avro.dynamicSchemaGenerationEnabled

如果您希望转换器使用反射从POJO推断Schema,则启用。

默认

false

spring.cloud.stream.schema.avro.readerSchema

Avro通过查看编写器模式(源有效载荷)和读取器模式(应用程序有效负载)来比较模式版本,查看Avro文档以获取更多信息。如果设置,这将覆盖模式服务器上的任何查找,并将本地模式用作读取器模式。

默认

null

spring.cloud.stream.schema.avro.schemaLocations

使用Schema服务器注册此属性中列出的任何.avsc文件。

默认

empty

spring.cloud.stream.schema.avro.prefix

要在Content-Type头上使用的前缀。

默认

vnd

Schema注册和解决

为了更好地了解Spring Cloud Stream注册和解决新模式以及其使用Avro模式比较功能,我们将提供两个单独的子部分:一个用于注册,一个用于解析模式。

Schema注册流程(序列化)

注册过程的第一部分是从通过信道发送的有效载荷中提取模式。Avro类型,如SpecificRecordGenericRecord已经包含一个模式,可以从实例中立即检索。在POJO的情况下,如果属性spring.cloud.stream.schema.avro.dynamicSchemaGenerationEnabled设置为true(默认),则会推断出一个模式。

图10. Schema Writer Resolution Process

一旦获得了架构,转换器就会从远程服务器加载其元数据(版本)。首先,它查询本地缓存,如果没有找到它,则将数据提交到将使用版本控制信息回复的服务器。转换器将始终缓存结果,以避免为每个需要序列化的新消息查询Schema服务器的开销。

图11. Schema注册流程

使用模式版本信息,转换器设置消息的contentType头,以携带版本信息,如application/vnd.user.v1+avro

Schema解析过程(反序列化)

当读取包含版本信息的消息(即,具有上述方案的contentType标头)时,转换器将查询Schema服务器以获取消息的写入器架构。一旦找到传入消息的正确架构,它就会检索读取器架构,并使用Avro的架构解析支持将其读入读取器定义(设置默认值和缺少的属性)。

图12. Schema阅读决议程序
注意

了解编写器架构(写入消息的应用程序)和读取器架构(接收应用程序)之间的区别很重要。请花点时间阅读Avro术语并了解此过程。Spring Cloud Stream将始终提取writer模式以确定如何读取消息。如果您想要Avro的架构演进支持工作,您需要确保为您的应用程序正确设置了readerSchema。

Schema注册表客户端的更多相关文章

  1. SetCookies, cookie规范注册表和cookie存储将会优先于设置在HTTP客户端级别中默认的那些

    遇到下面问题解决方法: Hey? 404 抱歉,你输入的网址可能不正确,或者该网页不存在. 7 秒后返回首页 使用独立的本地执行上下文来实现对每个用户(或每个线程)状态的管理. 定义在本地内容中的co ...

  2. 万象客户端设置服务端ip保存在注册表的位置

    HKEY_LOCAL_MACHINE\SOFTWARE\Sicent\wx2004Clt 这个注册表被保护了,不能修改和删除,但可以在安全模式操作.

  3. Oracle 客户端注册表字符集修改-----解决乱码 .

    本地ORACLE连接创建好后,默认是GBK的字符集,如果连接服务器不是同样的GBK字符集就会出现中文乱码的问题,这种情况我们需要修改本地的字符集来和服务器匹配. 通过注册表修改   HKEY_LOCA ...

  4. C#综合揭秘——通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

  5. windows注册表学习笔记

    注册表,想起来了就学学,方便操作.无需把它当成重要学问,今日就学一波,作为了解. 一.注册表清理脚本 主要是删除临时文件,旧文件.并不能够删除无效的键 @echo off del/f/s/q %sys ...

  6. 修改注册表来修改IE的设置---资料汇总

    原文链接: http://blog.csdn.net/wangqiulin123456/article/details/17068649 附带批处理执行脚本: @echo off &title ...

  7. 【转】C#综合揭秘——通过修改注册表建立Windows自定义协议

    引言 本文主要介绍注册表的概念与其相关根项的功能,以及浏览器如何通过连接调用自定义协议并与客户端进行数据通信.文中讲及如何通过C#程序.手动修改.安装项目等不同方式对注册表进行修改.其中通过安装项目对 ...

  8. javascript取得机器名,用户名,读写注册表,启动应用程序

    javascript取得机器名,用户名,读写注册表,启动应用程序//javascript有个特殊的对象ActiveXObject,通过它可以访问windows的本地文件系统和应用程序,比如:有的时候我 ...

  9. 注册表-各种功能-隐藏IE、隐藏硬盘、禁用硬件

    1.在[我的电脑]上隐藏软驱 在[开始]→[运行]→输入[Regedit]→[HKEY_CURRENT_USER]→[Software] →[Microsoft] →[Windows]→[Curren ...

随机推荐

  1. SpringBoot 通过配置禁用swagger

    转自:https://blog.csdn.net/weixin_37264997/article/details/82762050 一.序言 在生产环境下,我们需要关闭swagger配置,避免暴露接口 ...

  2. Sql 语句中 IN 和 EXISTS 的区别

    IN 语句:只执行一次 确定给定的值是否与子查询或列表中的值相匹配.in在查询的时候,首先查询子查询的表,然后将内表和外表做一个笛卡尔积,然后按照条件进行筛选.所以相对内表比较小的时候,in的速度较快 ...

  3. python的with语法的深入理解

    如果你有一些对象(比如一个文件.网络连接或锁),需要支持 with 语句,下面介绍两种定义方法. 方法(1): 首先介绍下with 工作原理 (1)紧跟with后面的语句被求值后,返回对象的“__en ...

  4. springboot 单元测试 指定启动类

    问题 在做单元测试时,写了一个工具类,用于注入spring的上下文. public class AppBeanUtil implements ApplicationContextAware { pri ...

  5. Linux学习之组管理和权限管理

    Linux组的基本介绍 在Linux中的每个用户必须属于一个组,不能独立于组外.在Linux中每个文件有所有者,所在组,其他组的概念. 1)所有者 2)所在组 3)其他组 4)改变用户所在的组 文件/ ...

  6. Httpd服务入门知识-Httpd服务常见配置案例之实现用户家目录的http共享

    Httpd服务入门知识-Httpd服务常见配置案例之实现用户家目录的http共享 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.实现用户家目录的http共享前提 在配置家目录共 ...

  7. Centos系统的升级

    文章来源:https://blog.csdn.net/kikajack/article/details/79396793 系统及内核版本: [root@node5 ~]# cat /etc/redha ...

  8. 【转载】jmeter-命令行执行脚本

    原文地址:https://blog.csdn.net/qq_35451939/article/details/79643560 日常测试过程中发现,在大数量并发时,jmeterGUI界面时长宕机.卡死 ...

  9. 图论 - Bellman-Ford算法

    Bellman-Ford Dijkstra算法虽好,但是不能解决带有负边权的图. 而利用Bellman-Ford可以完美的解决最短路和负边权的问题 朴素Bellman-Ford算法 w[i] 权值 u ...

  10. Object类.时间日期类.System类.Stringbuilder类.包装类

    Object类 java.lang.Object类是java语言中的根类,即所有类的父类.它中描述的所有方法都可以使用.在对象实例化的时候,最终找的父类就是Object. 如果一个类没有特别指定父类, ...