gpt4 book ai didi

java - 在 Spring 中以编程方式启用和禁用某些 @RabbitListener?

转载 作者:行者123 更新时间:2023-11-30 06:06:48 25 4
gpt4 key购买 nike

我有一个发布事件 E1 的类 A。 E1 由使用 @RabbitListener 注释的同一应用程序中的类 B 使用。 B 做一些事情然后发布事件 E2 被 C 等消费(形成一个流程链)。

我想做的是两件事:

  1. 我想在集成测试中测试 A,但在这样做时我想禁用 RabbitListener 的,这样作为 E1 发布结果的整个过程就不会被执行。我只想断言 A 做了它应该做的并发布了 E1。我设法通过设置 spring.rabbitmq.listener.auto-startup=false 来适应这一点。
  2. 我还想通过将 E1 发布到 RabbitMQ 来在集成测试中测试 B,这样我就可以确信我已经正确配置了 B 的 RabbitListerner。但同样,我不希望 C 被称为 E2 发布的副作用。

我知道我可能可以使用模拟来做到这一点,但最好我想测试真实的交易并使用实际的组件(包括将消息发送到实际的 RabbitMQ 实例,在我的例子中,该实例在 Docker 中运行)。

我可以在 Spring Boot 中以一种很好的方式实现这一点吗?还是建议使用 @RabbitListenerTest 并确实使用模拟?

最佳答案

@RabbitListenerid 属性:

/**
* The unique identifier of the container managing for this endpoint.
* <p>If none is specified an auto-generated one is provided.
* @return the {@code id} for the container managing for this endpoint.
* @see org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry#getListenerContainer(String)
*/
String id() default "";

RabbitListenerEndpointRegistry#getListenerContainer(String) 返回 MessageListenerContainer 并且您已经可以控制 start()/stop() 个人 @RabbitListener 处理程序。

关于java - 在 Spring 中以编程方式启用和禁用某些 @RabbitListener?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43365135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com