我正在寻找解决此问题的最佳解决方案:
我有一个客户端和一个服务器。
客户端使用call.invoke方法向服务器发送请求。 目前调用是同步的,正在等待应答。
在负载下从服务器接收重播的时间约为 1 秒(这是很多时间)。
在客户端,我们每秒生成大约 50-100 个请求,队列正在爆炸。
现在我刚刚创建了一个线程池,它将异步工作,并将每个线程向服务器发送请求,但请求本身将是同步的。
其含义是,如果我们确实希望线程池能够正常工作,则线程池应该维护约 100 个线程。
我不确定这是否是最佳解决方案。
我还想以某种方式创建 1 个用于发送请求的线程和 1 个用于捕获重播的线程,但我担心我会将负载传递到服务器端。
一些重要的事情:
我们无法影响服务器端的代码,也无法控制接收重播所需的时间。
在接收重播时,我们只是使用此数据创建另一个数据结构并将其传递 - 因此时间戳并不重要。
我们正在使用轴 API。
知道解决这个问题的最佳方法是什么吗? 100个线程的线程池看起来不错?或者还有其他方法吗?
谢谢!
最佳答案
您可以通过注册回调实例,以非阻塞客户端方式调用axis服务。
客户端类:
ServiceClient sc = new ServiceClient();
Options opt= new Options();
//set the target EP
opt.setTo(new EndpointReference("http://localhost:8080/axis2/services/CountryService"));
opt.setAction("urn:getCountryDetails");
sc.setOptions(opt);
sc.sendReceiveNonBlocking(payload, callBack);
//具有 axisCallback 的内部类,覆盖其所有方法。一旦从后端收到结果,onMessage 就会被调用
AxisCallback callBack = new AxisCallback() {
@Override
public void onMessage(MessageContext msgContext) {
System.out.println(msgContext.getEnvelope().getBody().getFirstElement());
//this method get called when you received the results from the backend
}
...
}
编写轴服务引用:http://jayalalk.blogspot.com/2014/01/writing-axis2-services-and-deploying-in.html
关于java - 在java中使用axis创建异步请求的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21479403/