java - 在java中使用axis创建异步请求的最有效方法是什么?

标签 java multithreading asynchronous apache-axis

我正在寻找解决此问题的最佳解决方案:

我有一个客户端和一个服务器。

客户端使用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/

相关文章:

Java - 在 JPanel 中单击组件

java - eclipse中如何将一个类的引用更改为另一个类

java - JAR 不存在或不是普通文件

java - Android libGDX 在启动时随机崩溃

android - Toast 未显示并出错

java - 如何在guice中进行依赖I/O

javascript - 在 Node.js 中使用异步时出错

Python:Tornado 和持久数据库连接

c# - 如果不调整大小,C# 通用结构字典是否线程安全?