Oracle aq应用程序的集群负载均衡器

时间:2016-12-21 07:33:56

标签: java oracle load-balancing hazelcast oracle-aq

我有一个使用Oracle AQ处理信息的应用程序。消息是基于数据库中的记录创建的。应用程序加载要处理的消息,并将它们安排在内存中以供日后使用。该应用程序是聚集的,因此我遇到了三个问题:

  1. 假设消息中有一个变量(值不是常数)。在此基础上,如果有节点处理带有所述变量的消息,则只有该节点应处理具有相同变量值的消息。
  2. 启动群集节点时,应加载所有准备处理的记录(消息),但不应加载已加载以进行处理且尚未处理(已计划)的记录。
  3. 如果一个群集节点死亡并且它有计划进行处理的记录,则另一个节点应该接管工作(当前节点无法知道其他节点已经安排了什么)。
  4. 似乎像Hazelcast这样的分布式缓存可能不是一个好主意,因为性能很重要并且涉及很多消息(尤其是第二个问题)。

    我的问题是:

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

1 个答案:

答案 0 :(得分: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刚刚发布为早期访问。

如果有任何问题被误解或您有其他问题,请告诉我。