我需要在使用 Quarkus 编写的微服务中使用来自 RabbitMQ 的消息。我尝试对 Quarkus 使用smallrye-reactive-messaging,但遇到了两个问题:
- 它仅支持 AMQP 1.0,不适用于 RabbitMQ(即使我使用的是实验性的 AMQP 1.0 插件)。
- 它适用于 ActiveMQ Artemis,但还有另一个问题:smallrye-reactive-messaging 是...响应式,这很好,但现在没有时间将我的数据库代码重写为响应式。处理消息意味着将数以万计的文档持久化到 mongodb 中,这可能需要几分钟,而且似乎阻塞了整个服务器:
警告 [io.ver.cor.imp.BlockedThreadChecker] (vertx-blocked-thread-checker) 线程 Thread[vert.x-eventloop-thread-0,5,main]=Thread[vert.x-eventloop-thread-0 ,5,main] 已被阻塞 212088 毫秒,时间限制为 2000 毫秒:io.vertx.core.VertxException: 线程阻塞
所以我的解决方法是在 Quarkus 启动时启动一个线程来消费和处理消息。Quarkus支持调度定期任务是否有后台进程的注释或者我必须编写自己的扩展?