【问题标题】:Managing Shared Property File across Server Instances跨服务器实例管理共享属性文件
【发布时间】:2012-08-29 16:12:40
【问题描述】:

我开发了 Flex - Java - Spring Web 应用程序,并已部署到 Amazon EC2 映像中 - 一切看起来都很棒。

但是,我需要在位于不同机器上的应用程序的多个实例之间自动扩展和共享用户请求,即不在同一个 Tomcat 容器中。 Amazon 管理负载平衡,应用程序使用 AMQ 主题在每个实例之间传达关键的应用程序级别更改。

其中一个通知可能是属性。我有几个属性文件,我使用 @Value 注释将它们注入到相关的 Spring bean 中。这些属性文件位于类路径根目录 (classpath:properties/) 的属性文件夹中

在单个节点上操作时,当我更新属性时,我使用 setter 更新内存中的值,并使用 FileInputStream 和 FileOutputStream 将更改写回相关的属性文件。这很容易。

但是,现在明显的问题是,当我自动缩放并在不同的容器中启动新实例时会发生什么?此应用程序将读取已部署(旧)版本的属性文件,并最终表现出与其他并行节点不同的行为。

如果可以的话,我真的想在数据库上维护基于文件的配置 - 我知道数据库解决方案将是这里最普遍的响应,但任何建议都将不胜感激。

谢谢

【问题讨论】:

  • 共享配置库怎么样?这不一定是数据库。

标签: java spring properties


【解决方案1】:

就您已经在使用 JMS 主题而言,我建议您使用持久订阅。

如果客户端需要接收发布在某个主题上的所有消息,包括在订阅者处于非活动状态时发布的消息,它会使用持久的 TopicSubscriber。 JMS 提供者保留此持久订阅的记录,并确保保留来自主题发布者的所有消息,直到它们被此持久订阅者确认或过期。

查看 JMS API:http://docs.oracle.com/javaee/6/api/javax/jms/Session.html#createDurableSubscriber(javax.jms.Topic, java.lang.String)

【讨论】:

  • 这是一个选项,但我不知道应用程序将启动多少个或何时启动。这意味着该主题可能会在所有可能需要它的实例被激活之前到期。
猜你喜欢
  • 2014-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-27
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多