2009-11-20 66 views
0

我在这里遇到问题。 我有一个客户端A通过RMI调用B的代码。之后,我通过JMS发送一个队列请求到真正的实现C。但是,我不知道A的“地址”。有没有办法以某种方式存储连接数据,以便我可以稍后将数据返回到A如何在java中存储rmi连接?

基本上,B可以有大量的请求,并需要将其同步到请求者。怎么做?

实施例:

答:

... 
    rmiB.HelloWorld("Sys"); 
... 

B:

String HelloWorld(String s) { 
    ... 
    sendToJMS(s); 
    ... 
    return???? 
} 

C:

String HelloWorldOnJMS(String aff) { 
    return "aff+2" 
} 
+0

你的意思是你想让C的工作结果作为A的远程方法调用的结果返回吗?将数据返回给A的当前接口是什么? – erickson 2009-11-20 20:18:54

+0

是的,没错,我得到B上的一个请求,并在那里做一些工作,然后发送到JMS队列到C,我想稍后得到C结果并获得一个值并发送给A. 基本上我想要有一种方法来回叫A以外的被叫rmi方法。 – 2009-11-20 20:21:09

回答

1

如果无法修改A,然后B需要负责阻断直到C产生的结果,并且该结果同步作为RMI方法的结果返回。

这么看来这个问题更多的是关于如何C可以回复B(或“BS”,因为它听起来像你有这些集群)不是如何来应对A

正常情况下,类似的同步调用通过JMS在消息上模拟creating a temporary queue,specifying that as the reply address。因此,B会创建一个临时队列,然后阻塞该队列,直到它从C收到结果为止,然后将回复的内容返回给A

我可能完全不了解您的情况,但似乎有其他方法需要修改接口。

+0

绝妙的主意! – 2009-11-20 20:59:00

0

好,因为A和B已经通过RMI定位器连接,为什么不只是有一个regi还有一项服务,然后让B致电该服务?

+0

嗯,我不能修改A,因为它是一个客户端,我不能修改接口。 嗯,我这样做是因为在我的B代码中,我正在平衡服务器。我在那里为“客户”A处理了很多事情。 – 2009-11-20 20:15:46

0

将RMI呼叫转发给JMSService?听起来像Apache Camel正是你所需要的;它是进行这种企业集成的框架。

组件page提供了如何设置RMI和JMS(以及其他各种)端点的示例。然后,您将使用其强大的DSL编写路由,将消息从一个端点转发到另一个端点。

+0

绝对要去看看:3 – 2009-11-20 20:50:03