2016-12-21 54 views
0

我有一个使用Oracle AQ处理信息的应用程序。消息是基于数据库中的记录创建的。应用程序加载要处理的消息并将其安排在内存中供以后使用。应用程序是群集的,因为我有三个问题:适用于Oracle aq应用程序的群集负载平衡器

  1. 假设消息中有一个变量(值不是常量)。基于此,如果有一个节点处理带有所述变量的消息,则只有该节点应该处理具有相同变量值的消息。
  2. 启动群集节点时,应该加载所有准备好要处理的记录(消息),但不应加载已加载并处理且尚未处理(已计划)的记录。
  3. 如果一个群集节点死亡,并且它有记录调度处理,另一个节点应该接管工作(当前节点无法知道其他节点已经调度了什么)。

似乎像Hazelcast这样的分布式缓存可能不是一个好主意,因为性能很重要,并且涉及很多消息(特别是对于第二个问题)。

我的问题是:

一)我找不到任何开箱即用的解决方案对我的问题,看来我需要定制的负载均衡?
b)如果是这样,负载平衡器应该如何知道节点,我是否使用另一个Oracle AQ队列进行通信或类似Hazelcast?

回答

0

不完全确定我有你的问题,但我会尽力回答。

1)你在说什么样的变量,在一个值的内部?您可能需要查看ValueExtractor(http://docs.hazelcast.org/docs/3.7/manual/html-single/index.html#implementing-a-valueextractor)和数据关联性(http://docs.hazelcast.org/docs/3.7/manual/html-single/index.html#data-affinity)以确保相同的“变量”保留在同一个节点中。

2)对不起,但我没有真正得到这个要求。也许你只是不想“重新加载”已经在内存中的值?这将是默认行为。

3)从3.8开始,Hazelcast中有一个DurableExecutorService(http://docs.hazelcast.org/docs/latest-dev/manual/html-single/index.html#durable-executor-service),它将负责为您进行故障转移。 3.8刚刚发布为早期访问。

让我知道是否有什么被误解或您还有其他问题。