【问题标题】:JMS Reliability, handling Server downJMS 可靠性,处理服务器宕机
【发布时间】:2013-12-08 03:22:33
【问题描述】:

我正在尝试使用 ActiveMQ 创建可靠的 JMS 环境。我打算采用 JDBC 主从集群方法,在这种方法中,我可以将主服务器接收到的消息保存到数据库中,从服务器可以选择这些消息并在主服务器死机时运行它们。但是对于master和slave都宕机(由于任何原因)的情况,我没有解决方案。如果发生这种情况,生产者发送的消息会永远丢失吗?我可以做一些事情,比如将消息持久化到数据库并在其中一个 JMS 服务器恢复后执行它们,但是是否有更好/内置的解决方案来处理这种情况?

【问题讨论】:

    标签: java jms activemq reliability


    【解决方案1】:

    我可以做一些事情,比如将消息持久化到数据库并执行 在其中一台 JMS 服务器恢复后,它们是否存在 处理此类场景的更好/内置解决方案?

    你的想法是对的。如果生产者连接不上,一般情况下会抛出异常。您需要一个存储转发 (SAF) 生产者;如果客户端无法到达目的地,消息会本地存储在客户端文件系统中,并在客户端重新连接代理时发送。

    根据下面 nos 的 cmets,ActiveMq 似乎支持 store-and-forward 为客户使用本地存储,我已要求 nos 提交他的 cmets 作为答案。

    【讨论】:

    • 请注意,使用 activemq,您还可以在客户端应用程序中嵌入代理并将其转发给“真正的”代理,从而在客户端为您提供 SAF。
    • @nos 有趣,不知道!可嵌入代理与服务器端代理是同一个重量级进程吗?如果代理嵌入是客户端的资源消耗,它会适得其反;如果没有,这就是解决方案,100%。
    • 这是相同的代码,尽管您通常不会激活所有功能/模块。重量不重,嵌入activemq甚至经常用于线程间通信(使用vm://传输)
    • 所以它也是一个并发框架?很酷!我今天学到了一些东西!我正要更新我的答案,但出于尊重,如果你想发布你的答案,我会删除它,;-) 让我知道
    • activemq 有这样的功能真的很酷,但是它仍然不能解决我在所有 JMS 服务器都失败时处理这种情况的问题。我是不是过于谨慎了?如果不是,“持久化到数据库”是我拥有的最安全的选择吗?我正试图更加依赖数据库,因为我的整个应用程序将在数据库失败的情况下崩溃,因此不会丢失消息。请承认..
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2017-10-12
    • 2012-02-03
    • 1970-01-01
    相关资源
    最近更新 更多