代码之家  ›  专栏  ›  技术社区  ›  CaptainHastings

群集JVM

  •  4
  • CaptainHastings  · 技术社区  · 15 年前

    我有一种情况需要在同步应用程序中诱导异步行为。

    要详细说明,有一个整体的C++应用程序,它同步地为复杂的衍生产品定价。这个C++应用程序附带了一个Java包装器,我的应用程序使用它来与它交互。

    当前设计

    My APP <------> Java Wrapper <---> C++ application
    

    由于Java包装器对C++的调用是同步的,所以我希望通过拥有这些Java包装器的集群来创建异步行为。

    我将拥有一个“主包装器”,它将决定(以循环方式或基于集群中的一些实时信息)哪个单独的包装器获得请求。

    未来设计

                                        <---> Java Wrapper <---> C++ application
    My APP <------> Java Master Wrapper <---> Java Wrapper <---> C++ application
                                        <---> Java Wrapper <---> C++ application
    

    你们中有人有建造这种东西的经验吗? 任何建议、教程链接、代码位等都是最有用的。

    干杯

    仅供参考,我简单地看了一下陶土,它似乎是我需要的,但它不是一个选择(不是我公司认可的产品)。

    3 回复  |  直到 13 年前
        1
  •  1
  •   btreat    15 年前

    如果“Java主包装器”和“我的应用程序”在同一个JVM中,则可以让Java主包装器将定价结果存储在我的应用程序线程消耗的共享数据结构中。如果我的应用程序是不同的进程/JVM,那么可以使用JMS来分发结果。ActiveMQ是一个JMS提供程序。

        2
  •  1
  •   Jé Queue    13 年前

    C++应用程序被称为JNI库函数集,还是一个进程?您可以简单地考虑C++的产卵子过程(给它一个 main() )并在单个JVM的多个线程中使用其输出。C++程序可能会在单独的进程与协调多个JVMs之间有更好的机会。

        3
  •  0
  •   Vladimir Dyuzhev    15 年前

    看起来您不是在寻找集群,而是在寻找一个池。

    如果包装器在具有主线程的同一个JVM中是可执行的,那么任务就是简单地重用任何可用的 thread pool /Worker实现。甚至可以反编译包装器以查看它的main()方法实际调用的类,并尝试在应用程序中复制它。做了一个CORBA应用程序,工作正常。

    如果每个包装器都必须在不同的JVM中,最简单的方法就是(再次)分配线程池,其中每个线程监视自己的进程对象实例,将请求写入stdin,从stdout读取响应。

    当然,每个连接的线程不是最有效的设计,因此当您使其工作时,当一个小的线程池(甚至一个线程)使用选择器监视一个更大的包装进程实例池时,您实际上可以移动到一个模型。

    推荐文章