【问题标题】:Using JMS as a distributed lock manager?使用 JMS 作为分布式锁管理器?
【发布时间】:2010-02-17 16:03:48
【问题描述】:

我有一个系统,其中一些松散耦合的组件通过 JMS 交换消息进行通信。我现在正在研究一个新要求,该要求导致某些共享资源需要保护以防止两个或多个组件同时访问(或多或少是读/写问题的一个实例)。我正在寻找一种方法来协调对共享资源的访问,而不会给系统增加太多额外的复杂性。 (例如,如果不需要,我不想添加专用的分布式锁管理器)。

我的脑海中有一个部分解决方案,它将使用 JMS 基础架构作为其基础。基本上,将锁定消息发送到队列。如果 writer 队列中有消息,则在发送消息的组件再次将其删除之前,没有人可以向该队列发布消息。同样,当读者开始阅读资源时,他们会向读者队列发送一条消息,并在完成后将其删除。直到看到读者和作者队列都是空的,写者才会开始写。读取器在看到一个空的写入器队列之前不会启动。

当然,我需要找到一种方法来同步对两个队列的访问,以便写入器不会发布到写入器队列,而读取器会发布到已经看到空写入器队列的读取器队列......

这样的事情可以通过合理的工作量来解决吗?在 JMS 之上是否存在锁管理器的现有实现?您会推荐有关该主题的任何论文吗?

【问题讨论】:

    标签: concurrency locking jms distributed


    【解决方案1】:

    这听起来很成问题。边缘情况太多。陷阱太多。(例如,如果组件崩溃并且无法移除锁会发生什么?)不要过多地使用锁,当然也不要使用分布式锁。使用 JMS 服务器的功能来使用事务来实现您所需要的,然后忘记它。

    【讨论】:

      【解决方案2】:

      没有。您可能想改为查看Hazelcast distributed locks

      Hazelcast 是一个开源(Apache 许可)、事务性、分布式的映射、多映射、队列、主题、锁和 Java 执行器服务的实现。

      【讨论】:

        猜你喜欢
        • 2014-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-31
        • 1970-01-01
        • 2015-01-09
        • 2013-03-16
        相关资源
        最近更新 更多