何时使用Java和消息代理?

14

我在办公室是一名开发人员,那里的SOA开发处于高峰期。我们使用IBM MQ、IBM消息代理和Java/J2EE技术。

我目前被分配到一个项目中,其中使用了消息代理来开发中间件,使两个应用程序之间可以互相交互。我不确定是否消息代理是这种项目的正确选择,因为Java可以更有效地完成同样的工作,这促使我搜索互联网以了解使用两者的优势。

我在不同的网站上读到,消息代理被用于转换、路由和增强消息,而Java可以很好地高效地完成这项工作。因此,这引出了我的疑问:“何时使用Java,何时使用消息代理进行开发?”如果有人能帮我解答,那就太好了。

-RDJ


你是指 JMS 和 IBM Message Broker 之间的区别吗? - YoK
@YoK:我不只是指JMS,我指的是Java支持的整个SOA概念。 - Richie
5个回答

9
消息代理使操作人员能够在一个地方监控所有集成。此外,如果数据格式发生更改,可以轻松确定哪些集成受到更改的影响。
每个单独的集成可能都可以使用Java(或任何其他语言)实现,但最终你会得到一堆点对点的集成,这是消息代理试图解决的问题之一。
如果您要设计一个通用的转换/路由解决方案以Java为基础,那么您将设计一个消息代理 :) 这将很有趣,但实际上并不必要,因为已经有很多商业和开源消息代理可用。

感谢mwittrock提供的信息 :) 仍然让我困惑的是,我们可以使用一些路由和转换Java代码来制作Web服务,以使相同的事情在响应时间更短的情况下工作。是否存在MB应该使用而不是Java的场景? - Richie
在大多数情况下,是否将所有集成基于某种中间件组件已经为您决定。 - mwittrock
@Richie,我认为mwittrock的主要观点是你可以自己编写,这取决于你所面临的复杂性和维护成本与开发速度之间的权衡。像经纪人这样的完整的ESB具有许多优点,如果您将使用其功能,否则它可能会是昂贵的过度设计。您是否有高技能的程序员为您编写Java?您需要监视数据流、支持分析、审计、流程管理、操作控制的能力吗?您想支付某人提供支持还是自己提供支持? - Encaitar

4

据我理解,您正在尝试在核心Java中实现功能,而不是使用现成的消息代理和类似的SOA相关技术。

我的建议是-不要重复造轮子。即使您尝试这样做,最终也会遇到相同的技术问题并导致类似的解决方案。为什么不专注于业务逻辑,而不是尝试开发已经存在且可能更经过测试和可信赖的东西的等效物呢?


非常感谢Gopi :) 请看一下我的评论,针对mwittrock.. "是否有情况下应该使用消息代理而不是Java WS?" - Richie

2
从更实际的角度来看,WebSphere Message Broker提供了一种集成非Java应用程序(C、COBOL、PHP、VB等)的方式,这通常很难通过Java实现。此外,Java不太适合处理XML。ESQL和XSLT都比Java更适合进行XML转换。WebSphere Message Broker还能够处理超出JMS限制的消息传递(它也可以执行JMS)。您可以看看WebSphere ESB,它有点像是Message Broker的Java实现。该产品期望外部非Java应用程序适应Java世界,因此其集成能力较弱,但我认为Java人员将会发现使用它很舒适。

1
Websphere Message Broker 是一种ESB,而Java则是一种编程语言。 有些ESB使用Java作为实现语言,例如Axis和Fuse,但它们是否足够强大以解析XML、编排服务、与主机系统集成呢?在Message Broker中进行Web服务的设计和开发很容易且用户友好。正如正确指出的那样,ESQL对于XML转换和处理非常强大,是Message Broker使用的实现语言。此外,在MB中与MQ、HTTP、File节点的集成是无缝且高效的。

0

首先要了解的是,Broker的Java-API是建立在C-API之上的,并不能完全访问所有可用的功能。

其次,它很丑陋,我不会将其用于简单的映射转换,当然现在也有可视化映射器。

尽管如此,在特殊情况下仍然非常有用。我使用它的一个例子是匹配合并一些消息内容。基本上,场景是接收包含2000多个元素的Msg1,然后获取相应的包含2000多个元素的消息Msg2,提供额外的细节。

因此,在ESQL中,您只能从Msg1.element [1]开始扫描Msg2以进行匹配,为了优化,可以在使用完后从Msg2中删除元素。但是,从2000多个元素扩展到5000多个元素时,这将极大地消耗CPU资源。而且需要很长时间,对于真正大的消息,需要超过5分钟。

另一种选择是使用Java计算节点,并将第二个消息的内容加载到Java Tree对象中,这将处理时间缩短到约3秒。

因此,如果您只是进行转换,请避免使用Java计算节点。但是,如果您正在进行更复杂和/或需要大量CPU资源的操作,则一定要尝试使用Java计算节点。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接