spring-boot - 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 的新手,不知道这个错误的根本原因是什么。
知道这种情况有什么问题吗?
谢谢
解决方案
推荐阅读
- java - 在 selenium 中使用 for 循环时如何获取当前 url 并将其粘贴到邮件中(作为表格格式)
- android - 使用对话框的 KEY 检索 Firebase 数据
- java - 从将对象存储为值的哈希图中获取最小值
- angular - 修改类型以在嵌套对象(路由)中具有新属性
- python - 在 pytest 测试开始时创建服务器
- mysql - 根据前一行中的列值和同一行中的其他列计算列值(oracle 11g db)
- haskell - 如何在 Haskell 中使用用户输入测试小程序
- ios - 使用 react-native-share 将视频分享到 IOS 上的 Instagram
- string - 如何计算一个单元格中的唯一特征字符串?
- python - 为什么在导入内部函数时会发生 UnboundLocalError