什么是两个组件之间通信的最佳设计

时间:2012-11-05 11:41:55

标签: java java-ee architecture

目前我们正在开展一个项目,我们正处于项目的设计和架构阶段,以下是项目的要点。

  • 有生成实时数据的开关
  • 我们在Java / Java EE中有两个组件,称之为CompA和CompB
  • CompA根据来自交换机的输入记录应用某些进程,而不联系任何数据库,CompA没有数据库访问权限。
  • CompB获取CompA的流程记录并应用处理,这涉及业务数据库
  • CompA和CompB在系统中有多个实例,用于扩展性和容错性。
  • 记录是具有多个字段的文本记录
  • 记录是事务性的,如果是来自CompA和CompB的进程,On记录被视为已处理,否则它将被回滚并重新发送

现在问题是CompA和Comp B之间进行通信的最佳方式

一种方法是

 1. CompA--------> CompB
 2. CompA-------->Messaging Server(JMS)------> CompB

要求:将有多个CompA和CompB是系统,如果任何组件发生故障,其他对等方将共享负载,例如,如果CompA失败,其负载将由其他CompA实例共享在系统中。为此,我们将使用JMS进行第二个选项,以便CompA不与CompB紧密绑定。但是,随着新组件(Messaging Server)的引入,这可能会导致性能下降,因为记录处理是事务性的,系统是实时的。
您的建议和专家建议将受到高度关注

2 个答案:

答案 0 :(得分:5)

JMS是可行的方法 - http://docs.oracle.com/javaee/6/tutorial/doc/bnceh.html

它非常可靠,您可以执行设置消息过期和强制执行优先级等操作,它非常适合您的模型,该模型基本上是网络上的“多个生产者/多个消费者”。

JMS支持事务,它是为可靠性而构建的 - 到目前为止它是最可靠的机制。在性能方面,你应该谈论“可扩展性”而不是“原始性能”。如果你的硬件可以应付,JMS会。

维基百科有一个非常好的可用JMS实现列表: http://en.wikipedia.org/wiki/Java_Message_Service#Provider_implementations

我使用过Apache ActiveMQ,Open Message Queue和OpenJMS,即使我没有在集群环境中部署JMS服务器的经验,我也认为ActiveMQ是我使用过的最可靠的解决方案。

答案 1 :(得分:1)

我建议使用JMS with spring integrationcheck示例

在我的情况下,我们已经将ActiveMq与spring集成一起使用,以便我们能够轻松处理负载均衡和故障转移。