将变量存储在消息队列中

时间:2013-11-01 08:09:15

标签: java architecture message-queue distributed-computing

我需要存储一个必须由多个模块访问和更新的条件变量。

系统有一个Web前端(servlet容器),它接受http调用并将它们转换为请求发布到消息队列的消息。

消息由具有相同功能的多个处理模块使用,每个处理模块在单独的JVM实例中运行。

处理模块可能需要调用一些外部Web服务来检索新信息。有4种替代Web服务,并且决定哪些服务需要基于过去10分钟内Web服务的平均响应时间。

我的问题是如何存储有关网络服务响应时间的信息

我的想法是不要为此使用共享数据库并尝试存储共享变量(在队列中的专用主题中),可以在需要时由处理模块读取和更新决定要调用哪个Web服务。更新非常简单,因为我们正在讨论平均响应时间(先前的平均值,第一次和最后一次更新TS以及当前响应时间应该足够)。

并发不是问题,因为只有20-30个处理模块,平均请求率是每几秒1。即使存在一些碰撞,我们对过时的值也有一定的容忍度。

1 个答案:

答案 0 :(得分:2)

我会将您的响应时间消息发送到主题,并且需要此信息的每个节点都会复制一份。当节点需要知道要使用哪个服务时,它会查看其本地副本。这样查找速度非常快,节点可以独立运行。

BTW您可能需要定期检查较慢系统的延迟。即一旦系统显得缓慢,它就不会再被使用,所以你不会再看到它不再慢了。您可以定期检查所有服务器以查看其性能是否已更改。