On this page
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)
JavaSerializationMessageConverter
和KryoMessageConverter
暂时保留。但是,我们计划在未来将它们从核心软件包和支持中移除。这种弃用的主要原因是 flag type-based,language-specific 序列化可能在分布式环境中引起的问题,其中生产者和消费者可能依赖于不同的 JVM 版本或者具有不同版本的支持 libraries(即 Kryo)。我们还想提请注意消费者和生产者甚至可能不是 Java-based 的事实,因此多语言样式序列化(i.e.,JSON)更适合。
24.3.2 已弃用类和方法
以下是显着弃用的快速摘要。见相应的{。 54} [55]了解更多细节。
SharedChannelRegistry
。使用SharedBindingTargetRegistry
。Bindings
。由它限定的 Beans 已经由它们的类型唯一标识 - 例如,提供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 配置和管理,并以 Spring-friendly 方式引用。BinderAwareRouterBeanPostProcessor
。虽然 component 仍然存在,但它不再是BeanPostProcessor
,将来会重命名。BinderProperties.setEnvironment(Properties environment)
。使用BinderProperties.setEnvironment(Map<String, Object> environment)
。
本节详细介绍了如何使用 Spring Cloud Stream。它涵盖了 creating 和 running stream applications 等主题。