译者 | 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 篇