Можем ли мы иметь AsyncHttpClient использовать существующие потоки для выполнения кода? - PullRequest
1 голос
/ 25 апреля 2019

Я пытался использовать библиотеку AsyncHttpClient для выполнения вызовов NIO из моего приложения Java Spring MVC.Поскольку я уже включил Apache Camel (с camel-netty ) в свое приложение, я хотел использовать потоки Camel-Netty, порожденные из его пула потоков, для непосредственной обработки запросов вместо AsyncHttpClient созданиясвои собственные потоки.

Я пытаюсь сделать что-то вроде этого:

import org.asynchttpclient.AsyncHttpClient;
import org.asynchttpclient.BoundRequestBuilder;
import org.asynchttpclient.DefaultAsyncHttpClientConfig;
import org.asynchttpclient.Dsl;

@Service
public class MyNIOClass {

  private io.netty.channel.nio.NioEventLoopGroup camelNettyEventLoopGroup = applicationContext.getBean("sharedNIOPool",io.netty.channel.nio.NioEventLoopGroup.class);
  private DefaultAsyncHttpClientConfig clientBuilder = clientBuilder = Dsl.config()
            .setMaxConnections(10)
            .setPooledConnectionIdleTimeout(100)
            .setConnectionTtl(500)
            .setRequestTimeout(5000)
            .setThreadPoolName( "My AHC ThreadPool" )
            .setKeepAlive( true )
            .setEventLoopGroup(camelNettyEventLoopGroup)
            .build();
  private AsyncHttpClient asyncClient = Dsl.asyncHttpClient(clientBuilder);

  public void makeAsyncHttpGetCall() throws SomeException {
    BoundRequestBuilder getRequest = asyncClient.prepareGet("http://someurl.com");
    AsyncCompletionHandler myAsyncCompletionHandler = getMyAsyncCompletionHandler();
    org.asynchttpclient.ListenableFuture<String> listenableFuture = getRequest.execute(myAsyncCompletionHandler);
    // Do something with the listenableFuture object. 
  }
}

makeAsyncHttpGetCall() вызывается из маршрута верблюда.

Нужно ли, чтобы AsyncHttpClient создавал свой собственный поток вместо использования существующего потока camel-netty, который вызывал этот блок кода?Можем ли мы заставить его использовать вызывающий поток?Таким образом, это будет похоже на вызов функции.

...