gpt4 book ai didi

回调中的 Java RMI 超时

转载 作者:太空宇宙 更新时间:2023-11-04 08:54:31 24 4
gpt4 key购买 nike

我们使用 Java RMI 进行通信。 RMI 客户端将处理请求和带有回调方法的对象传递给 RMI 服务器。服务器在完成处理后调用回调。该设置类似于 RMI Callbacks 中描述的设置。 .

有时,我们在调用回调方法时会在服务器中遇到“读取超时”异常。在引发异常之前,回调线程会停止大约一分钟。

java.rmi.ConnectIOException: error during JRMP connection establishment; nested exception is: 
java.net.SocketTimeoutException: Read timed out
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:286)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:110)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(RemoteObjectInvocationHandler.java:178)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(RemoteObjectInvocationHandler.java:132)
at $Proxy2.finished(Unknown Source)
at com.unrisk.db.grid.GridTask.invokeCallback(com.unrisk.db.grid.GridTask:1292)
at com.unrisk.db.grid.GridTask.invokeCallbacks(com.unrisk.db.grid.GridTask:1304)
at com.unrisk.db.service.tasks.EquityMDTask.afterRun(com.unrisk.db.service.tasks.EquityMDTask:276)
at com.unrisk.db.grid.GridTask.run(com.unrisk.db.grid.GridTask:720)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: java.net.SocketTimeoutException: Read timed out
at java.net.SocketInputStream.socketRead0(Native Method)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read(BufferedInputStream.java:237)
at java.io.DataInputStream.readByte(DataInputStream.java:248)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:228)
... 12 more

我们在 Windows Server 2003 32 位下使用 Sun Java JDK 1.6.0_18。

是否可以通过调整 RMI 相关系统属性来解决连接问题?

最佳答案

这篇值得 Collection 的文章中描述了许多超时: http://archives.java.sun.com/cgi-bin/wa?A2=ind0208&L=jini-users&P=R27617

根据我使用 JRMP 的(有限)经验,我发现我必须使用 JVM 全局属性来调整读取超时...

题外话:我的团队现在专门使用 Jeri(Java 可扩展远程调用),它是 Apache River(以前的:Sun Jini)项目的一部分。 Jeri 比 JRMP 更具可配置性,允许您定义自己的底层协议(protocol)。

关于回调中的 Java RMI 超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2608245/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com