24. 2.0 有什么新内容?

Spring Cloud Stream 引入了许多新的 features,增强功能和更改。以下部分概述了最值得注意的部分:

24.1 新 Features 和组件

  • 轮询消费者:引入轮询的消费者,它允许 application 控制消息处理速率。有关详细信息,请参阅“第 27.3.4 节,“使用被轮询的消费者””。您还可以阅读这篇博文以获取更多详细信息。

  • 千分尺支持:Metrics 已切换为使用千分尺MeterRegistry也作为 bean 提供,以便自定义 applications 可以自动装配它以捕获自定义 metrics。有关详细信息,请参阅“第 35 章,Metrics Emitter”。

  • 新的 Actuator Binding 控件:新的 actuator binding 控件允许您可视化和控制 Bindings 生命周期。有关更多详细信息,请参阅第 28.6 节,“绑定可视化和控制”

  • 可配置的 RetryTemplate:除了提供 properties 配置RetryTemplate之外,我们现在允许您提供自己的模板,有效地覆盖 framework 提供的模板。要使用它,请在 application 中将其配置为@Bean

24.2 值得注意的增强功能

此 version 包括以下显着的增强功能:

24.2.1 Actuator 和 Web 依赖项现在都是可选

此更改减少了 event 中已部署的 application 的占用空间,既不需要 actuator 也不需要 web 依赖项。它还允许您通过手动添加以下依赖项之一在 reactive 和常规 web 范例之间切换。

以下清单显示了如何添加传统的 web framework:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
</dependency>

以下清单显示了如何添加 reactive web framework:

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-webflux</artifactId>
</dependency>

以下列表显示了如何添加 actuator 依赖项:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

24.2.2 Content-type 谈判改进

verion 2.0 的核心主题之一是围绕 content-type negotiation 和消息转换的改进(在一致性和 performance 方面)。以下摘要概述了该领域的显着变化和改进。有关详细信息,请参阅“第 30 章,Content Type Negotiation”部分。另外这篇博文包含更多细节。

  • 所有消息转换现在仅由MessageConverter objects 处理****。

  • 我们引入了@StreamMessageConverter annotation 来提供自定义MessageConverter objects。

  • 我们将默认Content Type引入为application/json,在迁移 1.3 application 或在混合模式下运行时需要考虑这一点(即 1.3 producer→2.0 consumer)。

  • 如果无法确定提供的MessageHandler的参数类型(即public void handle(Message<?> message)public void handle(Object payload)),则具有文本有效负载和contentType text/……/json的消息将不再转换为Message<String>。此外,强大的参数类型可能不足以正确转换消息,因此contentType标题可能被某些MessageConverters用作补充。

24.3 值得注意的弃用

自 version 2.0 起,以下项目已被弃用:

24.3.1 Java 序列化(Java Native 和 Kryo)

JavaSerializationMessageConverterKryoMessageConverter暂时保留。但是,我们计划在未来将它们从核心软件包和支持中移除。这种弃用的主要原因是 flag type-based,language-specific 序列化可能在分布式环境中引起的问题,其中生产者和消费者可能依赖于不同的 JVM 版本或者具有不同版本的支持 libraries(即 Kryo)。我们还想提请注意消费者和生产者甚至可能不是 Java-based 的事实,因此多语言样式序列化(i.e.,JSON)更适合。

24.3.2 已弃用类和方法

以下是显着弃用的快速摘要。见相应的{。 54} [55]了解更多细节。

  • SharedChannelRegistry。使用SharedBindingTargetRegistry

  • Bindings。由它限定的 Beans 已经由它们的类型唯一标识 - 例如,提供SourceProcessor或自定义绑定:

public interface Sample {
	String OUTPUT = "sampleOutput";

	@Output(Sample.OUTPUT)
	MessageChannel output();
}
  • HeaderMode.raw。使用noneheadersembeddedHeaders

  • ProducerProperties.partitionKeyExtractorClass支持partitionKeyExtractorNameProducerProperties.partitionSelectorClass支持partitionSelectorName。此更改确保两个组件都是 Spring 配置和管理,并以 Spring-friendly 方式引用。

  • BinderAwareRouterBeanPostProcessor。虽然 component 仍然存在,但它不再是BeanPostProcessor,将来会重命名。

  • BinderProperties.setEnvironment(Properties environment)。使用BinderProperties.setEnvironment(Map<String, Object> environment)

本节详细介绍了如何使用 Spring Cloud Stream。它涵盖了 creating 和 running stream applications 等主题。