我在这里有问题。
我有一个客户端A
代码,通过RMI调用B
。之后,我通过JMS向真实实现C
发送队列请求。但是,我不知道A
的“地址”。有没有办法以某种方式存储连接数据,以便我可以在以后将数据返回到A
?
基本上,问题是B
可能有大量请求,需要将其与请求者同步。怎么做?
示例:
A:
...
rmiB.HelloWorld("Sys");
...
B:
String HelloWorld(String s) {
...
sendToJMS(s);
...
return????
}
C:
String HelloWorldOnJMS(String aff) {
return "aff+2"
}
答案 0 :(得分:1)
如果你不能修改A
,那么B
需要负责阻塞,直到C
产生结果,并且作为RMI方法的结果返回该结果同步。
所以似乎问题更多的是C
如何回复B
(或“Bs”,因为它听起来像你有一组这些),而不是如何回复{{1} }}
通常,这样的同步调用是通过JMS在消息上由creating a temporary queue,和specifying that as the reply address模拟的。因此,A
会创建一个临时队列,然后阻止该队列,直到它从B
收到结果,然后将回复的内容返回到C
。
我可能完全不了解您的情况,但似乎任何其他方法都需要修改A
- A
界面。
答案 1 :(得分:0)
那么,由于A和B已经通过RMI定位器连接,为什么不只是让A注册一个服务,然后让B调用该服务?
答案 2 :(得分:0)
RMI呼叫转发到JMSService?听起来像Apache Camel正是你所需要的;它是一个实现这种企业集成的框架。
组件page包含如何设置RMI和JMS(以及无数其他)端点的示例。然后,您将使用其强大的DSL编写路由,以将消息从一个端点转发到另一个端点。