26. 2.0 的新功能?
Spring Cloud Stream 引入了许多新功能,增强功能和更改。以下各节概述了最值得注意的部分:
26.1 新功能和组件
-
轮询 Consumer :引入轮询 Consumer,使应用程序可以控制消息处理速率。有关更多详细信息,请参见“ 第 29.3.5 节“使用受调查的 Consumer””。您也可以阅读此博客文章了解更多详细信息。
-
千分尺支持 :度量标准已切换为使用Micrometer。
MeterRegistry
还作为 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)
),带有文本有效载荷且contentType
的text/…
或…/json
的消息不再转换为Message<String>
。此外,强参数类型可能不足以正确转换消息,因此contentType
Headers 可以用作MessageConverters
的补充。
26.3 显着弃用
从 2.0 版开始,不推荐使用以下项目:
26.3.1 Java 序列化(Java 本机和 Kryo)
JavaSerializationMessageConverter
和KryoMessageConverter
暂时保留。但是,我们计划将来将它们移出核心软件包和支持。弃用此文件的主要原因是要标记基于类型,特定于语言的序列化可能在分布式环境中引起的问题,在该环境中,生产者和使用者可能依赖于不同的 JVM 版本或具有不同版本的支持库(即 Kryo)。我们还想提请注意这样一个事实,即 Consumer 和生产者甚至可能都不基于 Java,因此多语言风格的序列化(即 JSON)更适合。
26.3.2 不推荐使用的类和方法
以下是显着弃用的快速摘要。有关更多详细信息,请参见相应的\ {} [javadoc]。
-
SharedChannelRegistry
。使用SharedBindingTargetRegistry
。 -
Bindings
。符合条件的 Bean 已经通过类型 unique 进行了唯一标识,例如Source
,Processor
或自定义绑定:
public interface Sample {
String OUTPUT = "sampleOutput";
@Output(Sample.OUTPUT)
MessageChannel output();
}
-
HeaderMode.raw
。使用none
,headers
或embeddedHeaders
-
ProducerProperties.partitionKeyExtractorClass
赞成partitionKeyExtractorName
和ProducerProperties.partitionSelectorClass
赞成partitionSelectorName
。这项更改确保了两个组件都由 Spring 配置和 Management,并且以对 Spring 友好的方式被引用。 -
BinderAwareRouterBeanPostProcessor
。当组件保留下来时,它不再是BeanPostProcessor
,并且将来会重命名。 -
BinderProperties.setEnvironment(Properties environment)
。使用BinderProperties.setEnvironment(Map<String, Object> environment)
。
本节将详细介绍如何使用 Spring Cloud Stream。它涵盖了诸如创建和运行流应用程序之类的主题。