JMS,消息队列服务,ESB相关问题

时间:2011-05-11 12:56:51

标签: web-services jms soa esb

假设SOA基础架构中有2个Web服务A和B设置。

Web服务A依赖于本地安装的桌面应用程序提供的信息(它是基于C ++编程的遗留应用程序,并提供C ++ API以提供Web服务A所需的信息)。

场景是这样的:人类角色(可以被视为Web服务B的消费者)登录到网站并单击请求Web服务B提供的服务的按钮。作为该请求的一部分,他的ID被发送。 Web服务B使用此ID向Web服务A发送请求。 Web服务A使用此ID以某种方式确定与发起请求的人类演员的本地安装的桌面应用程序通信的方式。

主要问题Web服务A如何连接到桌面应用程序并使用SOA基础架构以可靠的方式获取信息。

假设除了桌面应用程序之外,此SOA中的所有内容都是基于Java的。

桌面应用程序基本上就像一个CRM应用程序,它有自己的内部数据库,而不是像MySQL这样的传统数据库。它仅提供有关人类演员的基本文本信息,以及安装的CRM桌面应用程序中该演员的客户。

我确实想使用SOA相关技术,即使它可能更复杂。

鉴于上述细节:

如何使用JMS解决此问题?

如果JMS不是正确的解决方案,ESB怎么样?如何使用ESB解决这个问题?

2 个答案:

答案 0 :(得分:2)

与桌面应用程序的通信将在很大程度上取决于应用程序能够执行的不同方法。如果应用程序具有数据库后端,则ESB可以促进与正在使用的特定数据库的预定义适配器的通信。如果应用程序具有可以通过编程方式分类的api,那么这也是一种方法。我不确定JMS是否是合适的解决方案,因为根据您的用例,您需要同步回复。将JMS置于中间(以某种方式)将破坏该回复,而是返回异步响应。

我建议您更多地了解桌面应用程序中可用的功能,并从您的发现开始评估ESB功能。对于这个用例,ESB可能过度,但如果您计划进行更多这样的操作,它可能会变得有价值。

答案 1 :(得分:1)

我认为问题归结为Java Web Service A,需要与C ++桌面应用程序通信以获取用户详细信息。

如果桌面应用程序能够使用Stomp等使用JMS,则可以使用ActiveMQ或HornetQ。这也允许您在多台计算机上将A扩展为多个实例,并使用JMS从Desktop应用程序请求用户信息。

另一种选择是在桌面应用程序上公开一个简单的API(REST,TCP等),并使用它来使Web Service与桌面应用程序通信。同样,您可以将A分发到多个实例中以实现可伸缩性。

您可以使用ESB将REST调用转换为TCP,或将SOAP转换为JMS等。基本上是任意转换。免费和开源ESB UltraESB [http://adroitlogic.org]包含许多示例,并且重量轻(约35MB),因此与>相比,'overkill'将是最小的。 300MB +资源匮乏的ESB