完全关闭springwebsockets stomp客户端

h6my8fg2  于 2021-07-13  发布在  Java
关注(0)|答案(1)|浏览(388)

springwebsocketstomp客户端发送 long 到spring websocket stomp服务器,该服务器立即返回相同的值。当客户端完成发送时,它退出其主线程,客户端按预期终止。
如果我启用跺脚心跳:

webSocketStompClient.setTaskScheduler(
    new DefaultManagedTaskScheduler()
    );

webSocketStompClient.setDefaultHeartbeat(
    new long[] {10_000, 10_000}
    );

当客户机的主线程完成时,客户机不再退出jvm,因为 DefaultManagedTaskScheduler 任务调度器启动了一个非守护进程线程(“pool-2-thread-1”)。
我不想通过 System.exit ,那么如何关闭keep-alive任务调度器,以便在主线程完成时客户端终止呢?

x7yiwoj4

x7yiwoj41#

热释光;博士
构建并保留jdks执行器,完成后关闭执行器。
细节:

public class MyTaskScheduler {
    private final ScheduledExecutorService executor;
    private final ConcurrentTaskScheduler scheduler;

    public MyTaskScheduler() {
        executor = Executors.newScheduledThreadPool(1);
        scheduler = new ConcurrentTaskScheduler(executor);
    }

    public TaskScheduler taskScheduler() {
        return scheduler;
    }

    public void shutdown() {
        executor.shutdown();
    }

}

在适当的上下文中,构造并保留新的任务调度器:

MyTaskScheduler myTaskScheduler = new MyTaskScheduler();

并将新的任务调度器示例用于心跳:

webSocketStompClient.setTaskScheduler(
    myTaskScheduler
    );

webSocketStompClient.setDefaultHeartbeat(
    new long[] {10_000, 10_000}
    );

申请完成后,关闭执行者:

myTaskScheduler.shutdown();

相关问题