【问题标题】:Notify multiple Rails app when pgsql database changes当 pgsql 数据库更改时通知多个 Rails 应用程序
【发布时间】:2013-09-15 08:51:30
【问题描述】:

我有两个 Rails 应用程序(一个用于 Web,一个用于后端)访问同一个 PGSQL 数据库。如果一个应用更改了数据库中的表,我想通知另一个应用。

我应该怎么做?

【问题讨论】:

  • 也许你可以使用this
  • 有什么理由这样做?可能是你的设计错了? IE。如果您想在某些数据更改时使用缓存清除器,则可以在缓存键中使用 updated_at 等等。
  • 嗨 MikDiet:我的两台服务器独立运行,一台用于计算,另一台用于 Web。我认为这不仅仅是缓存扫描。
  • @AdamNYC 您最终实施了什么解决方案?我也很感兴趣。在我的例子中,Java 程序写入数据库表,而 RoR 几乎用作 GUI 来生成报告。

标签: ruby-on-rails postgresql


【解决方案1】:

我认为这取决于:

  1. 您需要它有多可靠。
  2. 您需要以多快的速度发送通知。

@techvineet 建议的 FAYE 解决方案提供了一个很好的快速但不可靠的选择。 (注意,我并不是说它会经常失败,但它可能偶尔会失败,也许是 1/1000,如果这会给您带来问题,请避免)

如果您需要 100% 可靠的东西,并且速度并不重要,您可以将审计事件写入数据库,然后从每个应用程序轮询该表,前提是这些事件在与实际工作完成相同的事务中提交,你应该是安全的......但它会像你的轮询周期一样慢。

最后,如果您想要快速可靠的东西,那么您可以考虑使用 ActiveMQ 或 RabbitMQ 之类的东西在应用程序之间提供可靠的消息传递以通知更改。您需要在每个应用程序中都有一个工作进程来监听更改并适当地处理它们。

我最后的评论是,这有点“味道”。您尝试这样做的事实使我认为您的应用程序的架构可能需要从长远来看。一个明显的方法可能是将所有业务逻辑封装到一个公开 API 的应用程序中,然后从前端和后端应用程序调用该 API。

【讨论】:

  • 嗨,保罗。我们能否进一步解释为什么建议的解决方案不可靠以及为什么 1/1000 失败估计?此外,关于 API 解决方案,鉴于任何此类接口都应该是无状态的,为什么要解决这个特定问题?谢谢...
【解决方案2】:

您可以尝试使用 Faye http://faye.jcoglan.com/,这是一个发布和订阅消息服务器。它可以与 Rails https://github.com/jamesotron/faye-rails.git 集成。通过订阅消息并发布消息,可以将消息从一个应用程序传输到另一个应用程序。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2013-03-28
    • 2015-09-01
    • 1970-01-01
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-18
    相关资源
    最近更新 更多