youngDev
youngDev

Reputation: 339

IllegalStateException by calling the webClient request

My application is a non-web Spring boot application using the WebClient to make in internal get call.

Every time when I start it it returns me java.lang.IllegalStateException: executor not accepting a task.

The problem is connected with the webclient call: when I do block() everything is going normally. When I try to keep it reactive, it throws an exception.

Here is my main method:

public static void main(String[] args) {
    SpringApplication app = new SpringApplication(Myapp.class);
    app.setBannerMode(Banner.Mode.OFF);
    app.run(args);
}

@Override
public void run(String... args) throws Exception {
    ///something that calls a webclient

    exit(0);
}

Here is my webclient call:

@PostConstruct
private void init() {
    log.debug(String.format("diagram path %s", diagramPath));
    this.client = WebClient.builder()
            .baseUrl("blablabla")
            .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
            .build();
}

public Mono<String> getDiagram() {
    return client
            .get()
            .uri("/")
            .retrieve()
            .bodyToMono(MyResponse.class);

Here is the exception trace:

at io.netty.resolver.AddressResolverGroup.getResolver(AddressResolverGroup.java:60) ~[netty-resolver-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.bootstrap.Bootstrap.doResolveAndConnect0(Bootstrap.java:194) ~[netty-transport-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.bootstrap.Bootstrap.access$000(Bootstrap.java:48) ~[netty-transport-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:182) ~[netty-transport-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:168) ~[netty-transport-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:577) ~[netty-common-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:551) ~[netty-common-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:490) ~[netty-common-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:615) ~[netty-common-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:604) ~[netty-common-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104) ~[netty-common-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) ~[netty-transport-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:985) ~[netty-transport-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:505) ~[netty-transport-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:416) ~[netty-transport-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:475) ~[netty-transport-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) ~[netty-common-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:510) ~[netty-common-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:518) ~[netty-transport-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$6.run(SingleThreadEventExecutor.java:1050) ~[netty-common-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.43.Final.jar:4.1.43.Final]
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.43.Final.jar:4.1.43.Final]
    at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]

Upvotes: 0

Views: 2843

Answers (1)

Peter Jurkovic
Peter Jurkovic

Reputation: 2906

It looks like your application is in a shutting down state therefore Netty executor doesn't accept tasks (requests to be executed). How do you keep a process running if it is not a web application?

Source code of AddressResolverGroup

59. if (executor.isShuttingDown()) {
60.     throw new IllegalStateException("executor not accepting a task");
61. }

(note: It doesn't look right instantiating a WebClient instance in a @PostConstruct method)

Upvotes: 1

Related Questions