26. 2.0 的新功能?

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

26.1 新功能和组件

  • 轮询 Consumer :引入轮询 Consumer,使应用程序可以控制消息处理速率。有关更多详细信息,请参见“ 第 29.3.5 节“使用受调查的 Consumer””。您也可以阅读此博客文章了解更多详细信息。

  • 千分尺支持 :度量标准已切换为使用MicrometerMeterRegistry还作为 Bean 提供,以便自定义应用程序可以将其自动连线以捕获自定义 Metrics。有关更多详细信息,请参见“ 第 37 章,度量标准 Launcher”。

  • 新的 Actuator 绑定控件 :新的 Actuator 绑定控件使您可以可视化并控制绑定的生命周期。有关更多详细信息,请参见第 30.6 节“绑定可视化和控件”

  • Configurable RetryTemplate :除了提供用于配置RetryTemplate的属性外,我们现在还允许您提供自己的模板,有效地覆盖框架提供的模板。要使用它,请在您的应用程序中将其配置为@Bean

26.2 显着增强

此版本包括以下显着增强:

26.2.1 现在,Actuator 和 Web 依赖项都是可选的

如果既不需要 Actuator 也不需要 Web 依赖项,此更改将减少已部署应用程序的占用空间。还可以通过手动添加以下依赖项之一,在反应式和常规 Web 范例之间进行切换。

以下清单显示了如何添加常规 Web 框架:

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

以下清单显示了如何添加反应式 Web 框架:

<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>

26.2.2Content Type 协商的改进

Verion 2.0 的核心主题之一是围绕 Content Type 协商和消息转换的改进(在一致性和性能上)。以下摘要概述了该领域的显着变化和改进。有关更多详细信息,请参见“ 第 32 章,Content Type 协商”部分。 此博客文章还包含更多详细信息。

  • 现在,所有消息转换仅由MessageConverter个对象处理。

  • 我们引入了@StreamMessageConverter注解以提供自定义MessageConverter对象。

  • 我们引入了默认的Content Type作为application/json,在迁移 1.3 应用程序或以混合模式(即 1.3 生产者→2.0Consumer)进行操作时,需要考虑该默认值。

  • 在无法确定提供的MessageHandler的参数类型的情况下(即public void handle(Message<?> message)public void handle(Object payload)),带有文本有效载荷且contentTypetext/……/json的消息不再转换为Message<String>。此外,强参数类型可能不足以正确转换消息,因此contentTypeHeaders 可以用作MessageConverters的补充。

26.3 显着弃用

从 2.0 版开始,不推荐使用以下项目:

26.3.1 Java 序列化(Java 本机和 Kryo)

JavaSerializationMessageConverterKryoMessageConverter暂时保留。但是,我们计划将来将它们移出核心软件包和支持。弃用此文件的主要原因是要标记基于类型,特定于语言的序列化可能在分布式环境中引起的问题,在该环境中,生产者和使用者可能依赖于不同的 JVM 版本或具有不同版本的支持库(即 Kryo)。我们还想提请注意这样一个事实,即 Consumer 和生产者甚至可能都不基于 Java,因此多语言风格的序列化(即 JSON)更适合。

26.3.2 不推荐使用的类和方法

以下是显着弃用的快速摘要。有关更多详细信息,请参见相应的\ {} [javadoc]。

  • SharedChannelRegistry。使用SharedBindingTargetRegistry

  • Bindings。符合条件的 Bean 已经通过类型 unique 进行了唯一标识,例如SourceProcessor或自定义绑定:

public interface Sample {
	String OUTPUT = "sampleOutput";

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

  • ProducerProperties.partitionKeyExtractorClass赞成partitionKeyExtractorNameProducerProperties.partitionSelectorClass赞成partitionSelectorName。这项更改确保了两个组件都由 Spring 配置和 Management,并且以对 Spring 友好的方式被引用。

  • BinderAwareRouterBeanPostProcessor。当组件保留下来时,它不再是BeanPostProcessor,并且将来会重命名。

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

本节将详细介绍如何使用 Spring Cloud Stream。它涵盖了诸如创建和运行流应用程序之类的主题。