首页 > 解决方案 > WebClient '强制关闭其注册任务未被事件循环接受的通道'

问题描述

我开发了一个与 Auto2 client_credentials 集成的 WebClient。

@Autowired
private WebClient webClient;
List <Device> deviceList = new ArrayList<Device>();


public void getDeviceData(String macAddress) {
    logger.info("** start getDeviceData . **");

    String formatMac = macAddress.replaceAll("(.{2})", "$1"+":").substring(0,17);
    String request = "{ \"cmMac\": \""+formatMac+"\" }";
     
     webClient.post()
        .uri("https:......")
        .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
        .body(Mono.just(request), String.class)
        .attributes(ServerOAuth2AuthorizedClientExchangeFilterFunction.clientRegistrationId("...."))
        .retrieve()
        .bodyToMono(String.class)
        .doOnError(e -> logger.error(e.getMessage()))
        .doOnNext(s ->  {
            JsonObject convertedObject = new Gson().fromJson(s, JsonObject.class);
            Device device = new Device();
            device.setMacAddress(macAddress);
            deviceList.add(device);
        }).block();
}


@Override
public void run(String... args) throws Exception {
    getDeviceData("xxxxxxxx");
    
    for (Iterator iterator = deviceList.iterator(); iterator.hasNext();) {
        Device device = (Device) iterator.next();
        logger.info(device.getMacAddress());
    }
}

由于我仍处于开发阶段,我正在使用 STS 运行程序。总的来说,该函数运行良好,它会检索访问令牌,然后对在线服务进行 post 调用。

当我需要更改代码并保存文件时,程序将失败并出现以下错误:

  : Force-closing a channel whose registration task was not accepted by an event loop: [id: 0xba25b296]

 java.util.concurrent.RejectedExecutionException: event executor terminated
at io.netty.util.concurrent.SingleThreadEventExecutor.reject(SingleThreadEventExecutor.java:926) ~[netty-common-4.1.60.Final.jar:4.1.60.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.offerTask(SingleThreadEventExecutor.java:353) ~[netty-common-4.1.60.Final.jar:4.1.60.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.addTask(SingleThreadEventExecutor.java:346) ~[netty-common-4.1.60.Final.jar:4.1.60.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:828) ~[netty-common-4.1.60.Final.jar:4.1.60.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.execute(SingleThreadEventExecutor.java:818) ~[netty-common-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.AbstractChannel$AbstractUnsafe.register(AbstractChannel.java:471) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:87) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:81) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.bootstrap.AbstractBootstrap.initAndRegister(AbstractBootstrap.java:323) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.bootstrap.AbstractBootstrap.register(AbstractBootstrap.java:227) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.resolver.dns.DnsNameResolver.<init>(DnsNameResolver.java:487) ~[netty-resolver-dns-4.1.60.Final.jar:4.1.60.Final]
at io.netty.resolver.dns.DnsNameResolverBuilder.build(DnsNameResolverBuilder.java:488) ~[netty-resolver-dns-4.1.60.Final.jar:4.1.60.Final]
at io.netty.resolver.dns.DnsAddressResolverGroup.newNameResolver(DnsAddressResolverGroup.java:114) ~[netty-resolver-dns-4.1.60.Final.jar:4.1.60.Final]
at io.netty.resolver.dns.DnsAddressResolverGroup.newResolver(DnsAddressResolverGroup.java:92) ~[netty-resolver-dns-4.1.60.Final.jar:4.1.60.Final]
at io.netty.resolver.dns.DnsAddressResolverGroup.newResolver(DnsAddressResolverGroup.java:77) ~[netty-resolver-dns-4.1.60.Final.jar:4.1.60.Final]
at io.netty.resolver.AddressResolverGroup.getResolver(AddressResolverGroup.java:70) ~[netty-resolver-4.1.60.Final.jar:4.1.60.Final]
at reactor.netty.transport.TransportConnector.doResolveAndConnect(TransportConnector.java:208) ~[reactor-netty-core-1.0.5.jar:1.0.5]
at reactor.netty.transport.TransportConnector.lambda$connect$2(TransportConnector.java:103) ~[reactor-netty-core-1.0.5.jar:1.0.5]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:125) ~[reactor-core-3.4.4.jar:3.4.4]
at reactor.netty.transport.TransportConnector$MonoChannelPromise._subscribe(TransportConnector.java:526) ~[reactor-netty-core-1.0.5.jar:1.0.5]
at reactor.netty.transport.TransportConnector$MonoChannelPromise.lambda$subscribe$0(TransportConnector.java:446) ~[reactor-netty-core-1.0.5.jar:1.0.5]
at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164) ~[netty-common-4.1.60.Final.jar:4.1.60.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:472) ~[netty-common-4.1.60.Final.jar:4.1.60.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) ~[netty-transport-4.1.60.Final.jar:4.1.60.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[netty-common-4.1.60.Final.jar:4.1.60.Final]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.60.Final.jar:4.1.60.Final]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.60.Final.jar:4.1.60.Final]
at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]

我是 WebClient 的新手,不知道这个错误的根本原因是什么。

知道这种情况有什么问题吗?

谢谢

标签: spring-bootspring-webclient

解决方案


推荐阅读