我在Web应用程序(Jersey endpoints )中要求将消息发布到Rabbit MQ实例中 . 要求是我应该在发布到Rabbit MQ之前“保留”消息/请求30秒 .

我的问题是:选项#1 - 导致主线程休眠:

try {
        Thread.sleep(100);
    }catch(InterruptedException e ) {
        e.printStackTrace();
    }

问题(S)
这种方法会导致任何问题吗?
我的理解是REST jersey实现本质上是由多线程的servlet实现支持的 .
所以每个传入的请求都将在自己的线程中运行,每个传入的请求都会等待30秒 .
因此请求不会继续堆积 sequentially
这是正确的理解吗?

选项#2 - 启动异步进程并使该异步线程进入休眠状态 .

CompletableFuture.runAsync(() -> {
        try {
            Thread.sleep(100);
        }catch(InterruptedException e ) {
            e.printStackTrace();
        }
    });

在这种方法中 - 我已经阅读过某个地方,如果使用这种方式将是完整的未来将使用不是主线程(守护进程?)的fork连接池,因此如果主线程完成,守护进程线程将会死亡 - 但是作为Web应用程序的主线程将是除非应用程序关闭,否则不会死 - 这是正确的理解吗?
你觉得这种方法有什么问题吗?
最后 - 这两个选项之间哪个选项更好,还是有更好的方法?