首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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 代码,没有供应商锁定,可以观察计时器和跟踪KafkaTemplateRabbitTemplate及监听器容器。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,只需要像下面这样替换服务器地址:

代码语言:javascript
复制
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;
    }

    private EmbeddedKafkaContainer() {
        super();
    }
}

在配置了 EmbeddedKafkaBroker 之后,它就可以被用在每一个测试类中:

代码语言:javascript
复制
static {
    EmbeddedKafkaHolder.getEmbeddedKafkaBroker()
        .addTopics("students", "teacher");
}

private static final EmbeddedKafkaBroker broker =
    EmbeddedKafkaContainer.getEmbeddedKafkaBroker();

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

GlobalEmbeddedKafkaTestExecutionListener为测试计划启动一个全局的 EmbeddedKafkaBroker,并在测试计划被执行时停止它。监听器在默认情况下是禁用的,可以在 1.8 或更新版本的 JUnit Platform 上通过 spring.kafka.global.embedded.enabled 属性来启用。

用于非阻塞重试的@RetryableTopic注解不再是实验性的。在这个版本中,这个注解得到了进一步的改进,现在可以作为自定义注解的元注解。现在可以在同一个应用程序上下文的同一个主题上配置多个 @RetryableTopic 监听器。容器现在可以发布ConsumerRetryAuthEventConsumerRetryAuthSuccessfulEvent事件。

KafkaTemplateReplyingKafkaTemplate类中定义的各种 send 方法现在将返回一个CompletableFuture,而不是已弃用的ListenableFuture

Spring for RabbitMQ 现在支持单个活跃消费者的超级流。超级流是通过参数 x-super-stream: true 将几个流队列绑定到一个 exchange 来创建的。例如,我们可以使用SuperStream类型的 bean 来创建 test.exchange 和两个队列或分区:

代码语言:javascript
复制
@Bean
SuperStream superStream() {
  return new SuperStream("test.exchange", 2);
}

使用@RabbitListener注解的监听器方法现在可以消费CollectionList类型的消息批次

AsyncRabbitTemplateRabbitStreamTemplateRabbitStreamOperations的 send 方法现在返回CompletableFuture,而不是已弃用的ListenableFuture

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

更多信息可以在KafkaRabbitMQ的 What's New 页面中找到。

原文链接

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

  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/3QVmvCpHzu3Ba76DAmMQ
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券