相关疑难解决方法(0)

RabbitMQ集成测试和线程

我通过实现MessageListener接口并设置SimpleMessageListenerContainer来编写RabbitMQ使用者.当我手动测试时,它运行良好.现在我想编写一个集成测试:

  1. 创建一条消息
  2. 将消息推送到我的RabbitMQ服务器
  3. 在MessageListener实现消息消息时等待
  4. 一切都完成后,测试会产生一些断言

但是,由于我的MessageListener在一个单独的线程中运行,因此难以进行单元测试.在我的测试中使用Thread.sleep来等待MessageListener是不可靠的,我需要某种阻塞方法.

是否设置了响应队列并使用rabbitTemplate.convertSendAndReceive我唯一的选项?我想避免设置响应队列,因为它们不会在真实系统中使用.

有没有办法只使用rabbitTemplate.convertAndSend然后以某种方式等待我的MessageListener接收消息并处理它?理想情况下,我会想象这样的事情:

rabbitTemplate.convertAndSend("routing.key", testObject);
waitForListner() // Somehow wait for my MessageListener consume the message
assertTrue(...)
assertTrue(...)
Run Code Online (Sandbox Code Playgroud)

我知道我可以直接将消息传递给我的MessageListener而根本不连接到RabbitMQ,但我希望能够测试整个系统是否可以这样做.如果没有办法以合理清洁的方式实现我的目标,我计划回归到那个解决方案.

spring-amqp

7
推荐指数
1
解决办法
3616
查看次数

我们如何使用@RabbitListener来处理消息之前/之后

问题:我正在从MessageListener接口impl迁移到@RabbitListener。我有这样的逻辑,我在被多个类继承的MessageListener上进行“前置”和“后置”消息处理

例:

public AbstractMessageListener implements MessageListener {

     @Override
     public void onMessage(Message message) {

          //do some pre message processing

          process(Message message);

          // do some post message processing
     }

     protected abstract void process(Message message);

}
Run Code Online (Sandbox Code Playgroud)

问题:有没有一种方法可以使用@RabbitListener批注实现类似的功能,在其中我可以继承前/后消息处理逻辑,而不必在每个子@RabbitListener批注内重新实现或调用前/后消息处理,并且始终保持子@RabbitListener的可自定义方法签名?还是这太贪心?

预期结果示例:

public class SomeRabbitListenerClass {

    @RabbitListener( id = "listener.mypojo",queues = "${rabbitmq.some.queue}")
   public void listen(@Valid MyPojo myPojo) {
      //...
   }
}

public class SomeOtherRabbitListenerClass {

    @RabbitListener(id = "listener.orders",queues ="${rabbitmq.some.other.queue}")
   public void listen(Order order, @Header("order_type") String orderType) {
      //...
   }
}
Run Code Online (Sandbox Code Playgroud)

这两个@RabbitListener都使用相同的继承的前后消息处理

我看到@RabbitListener批注中有一个'containerFactory'参数,但是我已经在配置中声明了一个...我真的确定如何通过自定义containerFactory实现我想要的继承。


更新答案:这就是我最终要做的。

建议定义: …

spring-rabbit spring-amqp

6
推荐指数
1
解决办法
4245
查看次数

标签 统计

spring-amqp ×2

spring-rabbit ×1