我有一个发布事件 E1 的 A 类。 E1 由 B 类在使用 @RabbitListener
注释的同一应用程序中使用。 B 做一些事情,然后发布由 C 等消费的事件 E2(形成一个流程链)。
我想做的是两件事:
RabbitListener's
以便不执行作为 E1 发布结果的整个过程。我只想断言 A 做了它应该做的事情并发布了 E1。我通过设置 spring.rabbitmq.listener.auto-startup=false
设法适应了这一点。 RabbitListerner
。但同样,我不希望 C 被称为 E2 发布的副作用。 我知道我可能可以使用模拟来做到这一点,但最好我想测试真正的交易并使用实际组件(包括将消息发送到在我的情况下在 Docker 中运行的实际 RabbitMQ 实例)。
我可以在 Spring Boot 中以一种很好的方式实现这一目标吗?或者是否建议使用
@RabbitListenerTest
并确实使用模拟? 最佳答案
@RabbitListener
有 id
属性:
/**
* 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/