Estoy buscando una biblioteca de comunicación entre procesos en Java. Estoy buscando enviar pequeños mensajes entre las JVM y me gustaría hacerlo usando la memoria compartida si pudiera.inter jvm communication
Respuesta
Le sugiero que eche un vistazo en Terracotta. No sé si se ajustará a sus requisitos, porque el objetivo principal de Terracotta es la escalabilidad sin problemas ("api" es solo acceso a la memoria), pero ciertamente tiene un módulo de integración de mensajes. Es de código abierto
Saludos.
Java NIO tiene soporte para archivos mapeados en memoria. Si hay varias JVM que mapean en memoria el mismo archivo, pueden usarlo como memoria compartida.
Aquí hay un ejemplo de mapeo de memoria de un archivo.
try {
int shmSize = 1024;
RandomAccessFile file = new RandomAccessFile("shm.raw","rw");
// inialize file size
if(file.length() < shmSize) {
byte[] tmp = new byte[shmSize];
file.write(tmp);
file.seek(0); // seek back to start of file.
}
// memory-map file.
FileChannel ch = file.getChannel();
MappedByteBuffer shm = ch.map(FileChannel.MapMode.READ_WRITE, 0, shmSize);
ch.close(); // channel not needed anymore.
shm.load(); // force file into physical memory.
// now use the ByteBuffer's get/put/position methods to read/write the shared memory
} catch(Exception e) { e.printStackTrace(); }
En Linux se puede crear el archivo shm.raw en/dev/shm/un sistema de archivos basado en memoria. Esto ayudará a evitar cualquier entrada/salida de disco.
Para más detalles, lea este artículo Introduction to Memory-Mapped IO in Java
también todavía se necesita una manera de sincronizar lectura/escrituras en la memoria compartida. La JVM del remitente deberá indicar la JVM del receptor cuando se haya escrito un mensaje completo.
El uso de SocketChannel de Java NIO puede ser mejor para mensajes pequeños ya que el receptor puede ser notificado cuando se recibe un mensaje. La memoria compartida solo ayudará cuando se envíen mensajes grandes.
para IPC entre las JVM en diferentes máquinas tratan JIPC
Para inter-máquina, estoy usando JGroups o Sockets desde la comunicación y para intra-JVM una cola funciona. El agujero en mi componente de comunicación es entre procesos en la misma máquina. – Javamann
- 1. Comunicación de Java Inter Process y comunicación Inter Thread?
- 2. iPhone TCP Communication
- 3. Android USB Host Communication
- 4. UISplitViewController Master/Detail communication
- 5. Haskell Thread Communication Pattern Escenario
- 6. Jersey restful service communication (IncompatibleClassChangeError)
- 7. Problema de comunicación Inter-AppDomain
- 8. Inter Dependencias del proyecto de Maven
- 9. autofac COI, DDD, e inter-repositorio Dependencias
- 10. equivalentes Linux/Mac OS X para Windows Communication Foundation
- 11. ¿Alfresco Share proporciona algún mecanismo para la comunicación Inter Dashlet?
- 12. ¿Cuál es la diferencia entre JVM Spec, implementación JVM, JVM en tiempo de ejecución
- 13. ¿Cómo se diferencian las "JVM modernas" de las JVM antiguas?
- 14. ¿Es OpenJDK JVM lo mismo que Oracle Java SE JVM?
- 15. JVM - Heap and Stack
- 16. Problemas de memoria JVM
- 17. Instancias de JVM
- 18. JVM -XX: + argumento StringCache?
- 19. cómo bifurcar JVM?
- 20. Configuración de Eclipse JVM
- 21. JVM getObjectSize example
- 22. jvm design decision
- 23. Compilador Lua a JVM?
- 24. JVM en múltiples núcleos
- 25. ¿Cómo implementan JVM IdentityHashMap?
- 26. Compartiendo datos entre JVM
- 27. Ehcache multiple JVM - opensource?
- 28. Comprensión de JVM Better
- 29. ¿Cómo bloqueas una JVM?
- 30. Ejecución de varias JVM
Miré terracota, pero es una solución muy pesada para este problema. Thx – Javamann