2012-05-14 20 views
7

Soy nuevo en rabbitmq, pero por alguna razón (desconocida), el programa "hello world" no funciona para mí. El send.py y receive.py son simplemente copiar y pegar desde la página tutorial:"Hello World" no funciona para rabbitmq

http://www.rabbitmq.com/tutorials/tutorial-one-python.html

RabbitMQ se instala mediante "mmm" en una versión de RHEL 6. Python es de 2,6. empecé el servidor mediante

$ service rabbitmq-server start 

e imprime el "éxito".

No hay mensajes de error o advertencia ejecutando send.py y receive.py:

$ python send.py 
[x] Sent 'Hello World!' 

$ python receive.py 
[*] Waiting for messages. To exit press CTRL+C 

entonces nunca imprime "Hello World!".

¿Qué tiene de malo?

+0

odio declarar lo obvio aquí, pero compruebe que tanto el código de envío como el de recepción se conectan al mismo servidor, que los nombres de las colas y la configuración de la cola son los mismos. Si este es el caso, podrías intentar habilitar el complemento de administración y ver la cola a través de un navegador. Verá que se crea la cola y luego que hay mensajes en la cola, si funciona correctamente. – robthewolf

+0

Este código se estaba ejecutando en una máquina virtual. No estoy seguro de lo que estaba sucediendo ya que la VM parece una blackbox para mí. Pero lo he probado en otra máquina (real, no virtual) ¡y funciona! ¿Alguien sabe cuál podría ser la posible razón de que el código "hello world" no funcione en una VM? – fanchyna

+0

¿El código y el MQ se estaban ejecutando en la VM? – robthewolf

Respuesta

12

Primero activar la consola de gestión

sudo rabbitmq-plugins enable rabbitmq_management 

A continuación, abra el navegador

http://localhost:55672 

Entrar con invitado/huésped

En mi caso fue la memoria (menos de 2 Giga) y el mensaje "La alarma de espacio libre del disco para este nodo se ha apagado. Bloqueará el tráfico de red entrante hasta que la cantidad de espacio libre exceda el límite".

Editar el archivo /etc/rabbitmq/rabbitmq.config de la siguiente manera:

[ 
    {rabbit, [{disk_free_limit, {mem_relative, 0.1}}]} 
] 

Ahora reinicie el servicio de conejo:

service rabbitmq-server stop 
service rabbitmq-server start 
+0

Gracias!Por el estado de funcionamiento sudo rabbitmqctl Tengo esto: {disk_free_limit, 8335626240}, { disk_free, 3692666880}, y de hecho es el disco libre (RabbitMQ quiere 8,3 GB, pero yo sólo tenía 3,6 GB). ¿Cómo cambio el límite de disco libre? –

+0

actualizó la respuesta – danidacar

+0

+1 para la edición, ayudó mucho. Al principio, pensé que estaba mal escrito JSON, pero resultó que no, y las comas y el punto al final son obligatorios. Gracias. – npclaudiu

0

Tienes que empezar Rabbit MQ Serever. En el nombre del archivo de Windows: RabbitMQ Service - start. Puede usar este código:

import java.io.IOException; 
import java.util.ResourceBundle; 
import java.util.concurrent.TimeoutException; 
import com.rabbitmq.client.Channel; 
import com.rabbitmq.client.Connection; 
import com.rabbitmq.client.ConnectionFactory; 

public class NewTaskController implements Runnable { 
    private final String message; 

    private static final String EXCHANGE_NAME = "test"; 

    private static final String ROUTING_KEY = "test"; 

    public NewTaskController(final String message) { 
     this.message = message; 
    } 

    @Override 
    public void run() { 

     //getting data from application.properties 
     //for the rabbit_mq configuration 

     ResourceBundle mRB = ResourceBundle.getBundle("application"); 


     System.out.println("*****NewTaskController************"+mRB.getString("rabbitmq.port")); 
     String rabbitmq_username = mRB.getString("rabbitmq.username"); 
     String rabbitmq_password = mRB.getString("rabbitmq.password"); 
       String rabbitmq_hostname = mRB.getString("rabbitmq.hostname"); 
         int rabbitmq_port = Integer.parseInt(mRB.getString("rabbitmq.port")); 
    ConnectionFactory factory = new ConnectionFactory(); 
    factory.setUsername(rabbitmq_username); 
    factory.setPassword(rabbitmq_password); 
    factory.setHost(rabbitmq_hostname); 
    factory.setPort(rabbitmq_port); 
    Connection conn; 
    try { 
    conn = factory.newConnection(); 
    Channel channel = conn.createChannel(); 

    channel.exchangeDeclare(EXCHANGE_NAME, "direct", true); 
    String queueName = channel.queueDeclare().getQueue(); 
    System.out.println(queueName); 
    channel.queueBind(queueName, EXCHANGE_NAME, ROUTING_KEY); 
    System.out.println("Producing message: " + message + " in thread: " + Thread.currentThread().getName()); 
    channel.basicPublish(EXCHANGE_NAME, ROUTING_KEY, null, message.getBytes()); 

    try { 
     channel.close(); 
    } catch (TimeoutException e) { 
     e.printStackTrace(); 
    } 
    conn.close(); 
    } catch (IOException | TimeoutException e) { 
    e.printStackTrace(); 
    } 
} 
} 

application.properties file 

rabbitmq.username=guest 
rabbitmq.password=guest 
rabbitmq.hostname=localhost 
rabbitmq.port=5672