Spring for Apache Kafka 3.0 和 Spring for RabbitMQ 3.0 发布

2023-01-01 0 525

译者 | Johan Janssen

翻译者 | 若非山

策画 | 丁晓昀

VMWare正式发布Spring for Apache Kafka 3.0 和 Spring for RabbitMQ 3.0,须要 Java 17 和 Spring Framework 6.0。那些工程项目那时全力支持建立原生植物GraalVM插件,并采用Micrometer分项门脸来检视计时和同时实现追踪。那时,三个工程项目都在 pom.xml 文档中提供更多了BOM,方便快捷展开倚赖项管理工作。

Micrometer 用作进一步增强 JVM 标识符,没分销商瞄准,能检视计时和追踪KafkaTemplate、 RabbitTemplate及H55N罐子。Micrometer 近似于SLF4J(一类笔记门脸),而已它是用在分项各方面。

那时,Spring AOT原生植物提示信息需用来为采用 Spring for Apache Kafka 或 Spring for RabbitMQ 构筑的 Spring 插件建立原生植物快照,实例可在 GitHub 上的spring-aot-smoke-tests工程项目中找出。spring-kafka-test 组件中的EmbeddedKafkaBroker类在原生植物快照中不受全力支持。

Spring for Apache Kafka 3.0 明确要求Kafka应用程序是 3.3.1 版,假如要采用外交事务,明确要求最高 Kafka broker(即 Kafka 伺服器)是 2.5 版。

那时能跨数个试验类采用两个原则上的自上而下 EmbeddedKafkaBroker,只须要像上面这种代替伺服器门牌号:

public final class EmbeddedKafkaContainer { private static EmbeddedKafkaBroker embeddedKafkaBroker = new EmbeddedKafkaBroker(1, false) .brokerListProperty(“spring.kafka.bootstrap-servers”); private static boolean started; public static EmbeddedKafkaBroker getEmbeddedKafkaBroker() { if (!started) { try{ embeddedKafkaBroker.afterPropertiesSet(); }catch (Exception exception) { throw new KafkaException(“Error starting EmbeddedKafkaBroker”, exception); } started = true; } return embeddedKafkaBroker; } privateEmbeddedKafkaContainer() { super(); } }

复制标识符

在配置了 EmbeddedKafkaBroker 之后,它就能被用在每两个试验类中:

static{ EmbeddedKafkaHolder.getEmbeddedKafkaBroker() .addTopics(“students”, “teacher”); } private static final EmbeddedKafkaBroker broker = EmbeddedKafkaContainer.getEmbeddedKafkaBroker();

复制标识符

对于前面的实例,broker 在完成试验后将会继续运行,这可能会导致潜在的问题。例如,在采用 Gradle 守护进程时,EmbeddedKafkaBroker 的 destroy()方法应该在所有试验执行完毕之后被调用。

GlobalEmbeddedKafkaTestExecutionListener为试验计划启动两个自上而下的 EmbeddedKafkaBroker,并在试验计划被执行时停止它。H55N在默认情况下是禁用的,能在 1.8 或更新版的 JUnit Platform 上通过

spring.kafka.global.embedded.enabled 属性来启用。

用作非阻塞重试的@RetryableTopic注解不再是实验性的。在这个版中,这个注解得到了进一步的改进,那时能作为自定义注解的元注解。那时能在同两个插件上下文的同两个主题上配置数个 @RetryableTopic H55N。罐子现在能正式发布ConsumerRetryAuthEvent和

ConsumerRetryAuthSuccessfulEvent事件。

KafkaTemplate和ReplyingKafkaTemplate类中定义的各种 send 方法那时将返回两个CompletableFuture,而不是已弃用的ListenableFuture。

Spring for RabbitMQ 那时全力支持单个活跃消费者的超级流。超级流是通过参数 x-super-stream: true 将几个流队列绑定到两个 exchange 来建立的。例如,我们能采用SuperStream类型的 bean 来建立 test.exchange 和三个队列或分区:

@Bean SuperStream superStream() { return new SuperStream(“test.exchange”, 2); }

复制标识符

采用@RabbitListener注解的H55N方法那时能消费Collection或List类型的消息批次。

AsyncRabbitTemplate、RabbitStreamTemplate和RabbitStreamOperations的 send 方法那时返回CompletableFuture,而不是已弃用的ListenableFuture。

Spring for RabbitMQ 不再全力支持远程方法调用(RMI)。

更多信息能在Kafka和RabbitMQ的 Whats New 页面中找出。

原文链接

https://www.infoq.com/news/2022/12/spring-apache-kafka-rabbitmq-3/

相关阅读:

Spring Boot 3和Spring Framework 6采用Java 17和Jakarta EE 9,并全力支持基于GraalVM的原生植物Java

Spring Modulith采用组件和事件组织Spring Boot 3应用

InfoQ 2022 年趋势报告:Java 篇

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务