如何在不阻塞的情况下调用 JmsListener 中的反应式服务?

问题描述

@Component
@requiredArgsConstructor
public class EventListener {
    
    private final EventProcessingService eventProcessingService;

    @JmsListener(destination = "inputQueue",constainerFactory = "myContainerFactory)
    public void receiveMessage(Message message) {
       eventProcessingService(message).block(); // return Mono<Void>
    }

}

我有一些侦听队列的侦听器,当消息传入时,它调用服务的反应式方法 (EventProcessingService)。我想知道当我阻止执行响应式服务时会发生什么,这会导致错误吗?

解决方法

如果您的应用程序是使用消息的应用程序,最合适的方法是调用 subscribe()

如果您的应用程序是最终目的地,则应使用

Subscribe,而您尚未发布 eventProcessingService 实际执行的操作,因此无法判断。

所有代码都可能导致错误,这取决于您的错误处理方式。 Subscribe 本身不会抛出任何错误,但您可以选择以不同方式处理错误。

Here 您可以看到有关如何处理错误以及是否要记录错误的不同示例。等