Я пытался использовать библиотеку 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
, который вызывал этот блок кода?Можем ли мы заставить его использовать вызывающий поток?Таким образом, это будет похоже на вызов функции.