【问题标题】:JMS p2p failover pattern in order to guarantee deliveryJMS p2p 故障转移模式以保证交付
【发布时间】:2011-10-26 04:09:26
【问题描述】:

我是一名 Web 开发人员,最终从事了一些 j2ee 开发(新手)。我真诚地需要证实这个理论。

当用户点击保存按钮时,我有权将消息从我们的系统(生产者)传递到 SOA Enterprise 服务总线(消费者)。信息不能遗漏或不能送达,必须保留送达顺序。

环境:

  • Jboss eap 5.1 作为生产者。
  • JNDI 服务器是 ESB(可能是标准的)。
  • Jboss ESB 作为消费者。

由于异步特性,我选择的武器是 JMS、p2p。

当生产者即将发送消息时,可能会出现一些问题:

  • ESB 关闭导致 JNDI 异常
  • 队列管理器由于某种原因未唤醒或配置错误。这应该会导致一些 JMS 异常。
  • 网络中断,导致 JMS 错误。

所以我正在寻找一些故障转移模式。这是我的建议:

  1. 添加最初添加消息的内部 JMS 队列。
  2. 添加一个侦听内部队列并尝试将其发送到目标队列 (ESB) 的 MDB。
  3. 如果以任何方式失败,请记录致命并发送电子邮件给酷支持人员。

这应该生成一个可靠的模式,其中消息保留在内部队列上,直到被 MDB 处理。

请指教。

最好的问候

ds

【问题讨论】:

  • 我认为异步和保持交货顺序是矛盾的。当然,MDB 不保证保持秩序,恰恰相反......

标签: jms jndi jboss5.x esb message-driven-bean


【解决方案1】:

好吧,“临时”队列并不是一个完全坏主意,但在将数据从一个队列移动到另一个队列的这段时间里,您将面临潜在的风险窗口。即使那个窗口几乎没有,但如果你在那里遇到了一些失败会发生什么? - 您必须将消息放回队列(并且您会遇到以正确顺序获取它的问题 - 讨厌的东西!)或以某种方式坚持它,直到您将它放入另一个队列(如果您遇到一些失败情况,这反过来会很麻烦。 更稳定的解决方案是将数据放入带有队列顺序列的数据库中。然后,您可以按正确的顺序选择数据,将其发送到新队列,最后将其标记为“完成”或什至(更好?)删除数据库中的数据。

【讨论】:

  • 您如何保证队列顺序列数据正确?我的意思是不能保证收到的第一条消息将是第一个处理的。收到消息时,它不是 FIFO,因此第二条消息可能会作为第一条消息放入数据库中。至少这是我的理解。
猜你喜欢
  • 1970-01-01
  • 2013-12-17
  • 2014-12-25
  • 1970-01-01
  • 2014-04-27
  • 1970-01-01
  • 2018-07-11
  • 2016-05-16
  • 2022-01-12
相关资源
最近更新 更多