代码之家  ›  专栏  ›  技术社区  ›  Andy White

Java:跨多个服务器同步线程

  •  5
  • Andy White  · 技术社区  · 16 年前

    在Windows上的Java服务中,我需要在多个不同服务器上同步处理多个线程的问题。

    在这个应用程序中,我有多个使用者线程从同一个JMS队列中提取消息。消息分为3或4组,我需要确保每个组中的消息都是完全串行处理的。我需要某种同步机制来确保如果thread1提取了一条消息,然后thread2从该组中提取下一条消息,thread2等待thread1完成处理,然后开始处理它的消息。

    关于线程的分布式同步机制有什么建议吗?任何类型的解决方案都是好的(JMS解决方案、分布式缓存等)

    注意:我们使用的JMS提供程序是ActiveMQ。

    3 回复  |  直到 16 年前
        1
  •  7
  •   andri    16 年前

    ActiveMQ支持 message groups 从字面上看,这正是你需要的。

        2
  •  7
  •   Talip Ozturk    16 年前

    你可能想考虑使用 Hazelcast 分布式锁。超级精简,容易和开源。

    java.util.concurrent.locks.Lock lock = Hazelcast.getLock ("mymonitor");
    lock.lock ();
    try {
    // do your stuff
    }finally {
       lock.unlock();
    }
    

    当做,

    塔利普

    淡褐色石膏 -打开源分布式队列、映射、集、列表、锁

        3
  •  1
  •   erickson    16 年前

    邮件头中是否有类似组ID的内容?如果是这样,消费者可以创建 Selector 按顺序处理组。

    将一个组分配给一个特定的使用者可以通过散列该组标识符来完成,或者他们可以使用一些共识协议(如paxos或虚拟同步,消息通过单独的队列发送)来主动地相互协调。