Nuestra empresa tiene un sitio web basado en Python y algunos nodos de trabajo basados en Python que se comunican a través de Django/Celery y RabbitMQ. Tengo una aplicación basada en Java que necesita enviar tareas a los trabajadores de Apio. Puedo enviar trabajos a RabbitMQ desde Java sin problemas, pero los trabajadores con base en Apio nunca recogen los trabajos. Al observar las capturas de paquetes de ambos tipos de envíos de trabajos, existen diferencias, pero no puedo comprender cómo explicarlas porque una gran parte es binaria y no puedo encontrar documentación sobre la decodificación. ¿Alguien aquí tiene alguna referencia o experiencia al tener Java/RabbitMQ y Celery trabajando juntos?Interoperando con Django/Celery de Java
12
A
Respuesta
12
Encontré la solución. La biblioteca de Java para RabbitMQ se refiere a intercambios/colas/routekeys. En Celery, el nombre de la cola en realidad está mapeando al intercambio al que se hace referencia en la biblioteca de Java. Por defecto, la cola para el apio es simplemente "apio". Si la configuración de Django definen una cola llamada "myQueue" utilizando la siguiente sintaxis:
CELERY_ROUTES = {
'mypackage.myclass.runworker' : {'queue':'myqueue'},
}
continuación, el código basado en Java tiene que hacer algo como lo siguiente:
ConnectionFactory factory = new ConnectionFactory();
Connection connection = null ;
try {
connection = factory.newConnection(mqHost, mqPort);
} catch (IOException ioe) {
log.error("Unable to create new MQ connection from factory.", ioe) ;
}
Channel channel = null ;
try {
channel = connection.createChannel();
} catch (IOException ioe) {
log.error("Unable to create new channel for MQ connection.", ioe) ;
}
try {
channel.queueDeclare("celery", false, false, false, true, null);
} catch (IOException ioe) {
log.error("Unable to declare queue for MQ channel.", ioe) ;
}
try {
channel.exchangeDeclare("myqueue", "direct") ;
} catch (IOException ioe) {
log.error("Unable to declare exchange for MQ channel.", ioe) ;
}
try {
channel.queueBind("celery", "myqueue", "myqueue") ;
} catch (IOException ioe) {
log.error("Unable to bind queue for channel.", ioe) ;
}
// Generate the message body as a string here.
try {
channel.basicPublish(mqExchange, mqRouteKey,
new AMQP.BasicProperties("application/json", "ASCII", null, null, null, null, null, null, null, null, null, "guest", null, null),
messageBody.getBytes("ASCII"));
} catch (IOException ioe) {
log.error("IOException encountered while trying to publish task via MQ.", ioe) ;
}
Resulta que es justo una diferencia en la terminología.
Cuestiones relacionadas
- 1. Interoperando entre Matlab y C#
- 2. con Java
- 3. HTML con Markdown con Java
- 4. Ejemplo de Java con ClassLoader
- 5. Enlace de datos con Java
- 6. Integración de Groovy con Java
- 7. Visualización de árbol con Java
- 8. Conexión de Firebird con java
- 9. Programación de Java con Vim
- 10. Transmisión de audio con Java
- 11. Creación de informes con Java
- 12. Juegos Java 2d con Java SWING
- 13. Java XStream con HashMap
- 14. Crear PDF con Java
- 15. Java: depuración con SwingUtilities.invokeLater()
- 16. Limitaciones con Java Hotswap
- 17. Interfacing AutoCAD con JAVA
- 18. Traversal NAT con Java
- 19. Descargando archivos con Java
- 20. Java: ReentrantReadWriteLock con prioridad
- 21. Comenzando con Java EE
- 22. Grabar voz con Java
- 23. comienzan con java voip
- 24. palabra completa con Java
- 25. Java Trabajar con bits
- 26. Conexión SSH con Java
- 27. conecte DB2 con Java
- 28. prueba con Java
- 29. Java singleton con herencia
- 30. @ApplicationException con Java 1.7
Gracias por la sugerencia, aunque su uso de excepciones es bastante incorrecto .. – Debriter