Interoperating with Django/Celery From Java Interoperating with Django/Celery From Java django django

Interoperating with Django/Celery From Java


I found the solution. The Java library for RabbitMQ refers to exchanges/queues/routekeys. In Celery, the queue name is actually mapping to the exchange referred to in the Java library. By default, the queue for Celery is simply "celery". If your Django settings define a queue called "myqueue" using the following syntax:

CELERY_ROUTES = {    'mypackage.myclass.runworker'      : {'queue':'myqueue'},}

Then the Java based code needs to do something like the following:

        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) ;        }

It turns out that it is just a difference in terminology.