当前位置: 代码迷 >> java >> 集群JVM 当前设计 未来设计
  详细解决方案

集群JVM 当前设计 未来设计

热度:120   发布时间:2023-08-04 09:26:51.0

我遇到需要在同步应用程序中引发异步行为的情况。

详细地说,有一个整体的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

你们中有没有人有过构建这种东西的经验? 任何建议,指向教程的链接,部分代码等都将非常有帮助。

干杯

仅供参考,我简短地看过兵马俑,看来我需要它,但这不是一种选择(我公司不认可的产品)。

如果“ Java Master Wrapper”和“ My App”在同一JVM中,则可以让Java Master Wrapper将定价结果存放在My APP线程消耗的共享数据结构中。 如果“我的APP”是不同的进程/ JVM,则可以使用JMS分发结果。 ActiveMQ是一个JMS提供者。

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

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

如果包装程序可在与主线程相同的JVM中执行,则任务只是重用任何可用的 /工作程序实现。 您甚至可以反编译包装器,以查看其main()方法实际调用的类,并尝试在应用程序中重现它。 这样做对CORBA应用程序来说工作正常。

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

当然,每个连接线程不是最高效的设计,因此当使每个线程都工作时,实际上可能会迁移到一个模型,即一小线程(甚至一个线程)监视较大的包装Process实例池,使用选择器。

  相关解决方案