7

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

  • 有些交换机正在生成实时数据
  • 我们在 Java/Java EE 中有两个组件,称为 CompA 和 CompB
  • CompA 根据来自交换机的输入记录应用一些过程,而不接触任何数据库,CompA 没有 DB 访问权限。
  • CompB 获取 CompA 的流程记录并申请处理,这涉及到业务数据库
  • CompA 和 CompB 在系统中有多个实例以实现可扩展性和容错。
  • 记录是具有多个字段的文本记录
  • 记录是事务性的,如果它是来自 CompA 和 CompB 的处理,则认为记录已处理,否则它将被回滚并再次重新发送

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

一种方法是

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

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

4

2 回答 2

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 是我使用的最可靠的解决方案。

于 2012-11-05T11:46:19.633 回答
1

我建议将JMS 与 spring 集成一起使用。 检查示例

在我的例子中,我们使用了带有 spring 集成的 ActiveMq,以便我们能够轻松处理负载平衡和故障转移功能。

于 2012-11-05T12:02:38.713 回答