0

我这里有问题。我有一个通过 RMIA调用的客户端代码。B之后,我通过 JMS 向实际实现发送队列请求C。但是,我不知道A. 有没有办法以某种方式存储连接数据,以便我可以A稍后返回数据?

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

例子:

A:

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

乙:

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

C:

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

3 回答 3

1

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

所以看起来问题更多是关于如何C回复B(或“Bs”,因为听起来你有一个集群)而不是如何回复A.

通常,像这样的同步调用是通过 JMS 通过创建一个临时队列并将其指定为消息的回复地址来模拟的。因此,B将创建一个临时队列,然后在该队列上阻塞,直到它收到来自 的结果C,然后将回复的内容返回给A

我可能不完全了解您的情况,但似乎任何其他方法都需要修改AB界面。

于 2009-11-20T20:51:32.940 回答
0

好吧,既然 A 和 B 已经通过 RMI 定位器连接,为什么不让 A 也注册一个服务,然后让 B 调用该服务呢?

于 2009-11-20T20:12:10.087 回答
0

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

组件页面包含如何设置 RMI 和 JMS(以及无数其他)端点的示例。然后,您将使用其强大的 DSL 编写一个路由,将消息从一个端点转发到另一个端点。

于 2009-11-20T20:28:21.350 回答