【问题标题】:Priority Blocking Queue in HazelcastHazelcast 中的优先阻塞队列
【发布时间】:2020-10-15 03:11:55
【问题描述】:

我正在评估 Hazelcast IMDG,以期使用它来减少一些数据库瓶颈。我们的应用程序运行在多个节点上,并行处理来自位于中间的数据库的数据。

我们使用信号量表来分配工作,这是我们正在考虑用 Hazelcast 阻塞队列代替的。

但是,一些要处理的消息比其他消息具有更高的优先级,这让我开始怀疑,因为 Hazelcast 似乎没有 java.util.concurrent.PriorityBlockingQueue 的等价物。

我的第一个问题是是否有办法通过 Hazelcast 实现这一目标。 我的第二个问题是,是否有其他 IMDG 数据网格易于配置并嵌入到现有应用程序中来实现这一点。

提前感谢您的意见。

【问题讨论】:

  • Hazelcast 目前不提供此功能,您必须自己构建。但是如果你使用编程器的SPI,这并不难。如果您需要详细信息,请 PM 我
  • 不知道如何PM你。但是为什么不在这里提供您的解决方案/想法,以便每个感兴趣的人都能从中受益。我自己对包装 IMap<Priority, IQueue<Message>> 有一些想法,但对于 IMDG 的新手,我希望有更多经验的人提供一些专业知识。
  • 好主意。给我几天时间写吧。
  • 没有忘记...
  • 谢谢 想知道你是否确实这样做了:-)。我自己尝试了自己的版本,但遇到了各种问题。显然我的知识还不够成熟。与此同时,我开始阅读 Apache Ignite 文档,因为它们的内存表可能更容易帮助我解决问题,但我承认到目前为止我最喜欢 Hazelcast。无论如何,我会根据您提出的想法来看看

标签: java hazelcast


【解决方案1】:

我知道这有点晚了,但 Hazelcast 终于为分布式 PriorityQueue 提供了开箱即用的支持。见:https://github.com/hazelcast/hazelcast/pull/17201

它是常规队列的扩展,您只需在队列配置中添加一个比较器(https://github.com/hazelcast/hazelcast/pull/17201/files#diff-adec01c0eef8a0df650ac3c02789b91a2eafc8c2ffbb6e77c563dc88f5a5e9a2R559):

<priority-comparator-class-name>your.comparator.Class</priority-comparator-class-name>

Hazelcast IMDG 4.1 发布并添加文档后,我将更新这篇文章。

【讨论】:

    【解决方案2】:

    https://github.com/hazelcast/hazelcast-code-samples/tree/master/spi/priority-queue 是否满足您的需求?

    这是一个完整的示例——展示了如何扩展 Hazelcast 以添加优先级队列。不过需要进行一些调整以使其具有生产质量,并且一些单元测试不会出错。

    【讨论】:

    • 需要阅读和理解的内容很多,但您似乎付出了很多努力。
    • 非常感谢!很有用
    • 是否有任何在线文档显示如何通过该页面上提到的编解码器实现客户端-服务器协议?
    • 我不这么认为,这将是相当多的工作。让我们看看stackoverflow.com/questions/50119755/… 是如何得到回答的
    猜你喜欢
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2011-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多