2012-05-14 8 views
7

Jestem nowy dla rabbitmq, ale z jakiegoś (nieznanego) powodu, program "hello " nie działa dla mnie. send.py i receive.py są po prostu kopiowane i wklejane ze strony Samouczek:"Hello World" nie działa dla rabbitmq

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

RabbitMQ jest instalowany przy użyciu "yum" w wersji RHEL 6. Python 2.6. zacząłem serwera przy użyciu

$ service rabbitmq-server start 

i drukuje "sukces".

Nie ma żadnych komunikatów o błędach lub ostrzeżeń, uruchamiając send.py i receive.py:

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

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

Wtedy nie drukuje "Hello World!".

Co jest nie tak z tym?

+0

nienawiść to oczywiste tutaj, ale sprawdzić, że zarówno wysyłać i odbierać kod jest podłączana do tego samego serwera, że ​​nazwy kolejki i ustawienia kolejki są takie same. W takim przypadku możesz spróbować włączyć wtyczkę zarządzania i wyświetlić kolejkę w przeglądarce. Zobaczysz, że kolejka zostanie utworzona, a następnie, że są wiadomości w kolejce, jeśli działa poprawnie. – robthewolf

+0

Ten kod działa na maszynie wirtualnej. Nie jestem pewien, co się dzieje, ponieważ VM wygląda dla mnie jak blackbox. Ale testowałem na innej maszynie (rzeczywistej, nie wirtualnej) i działa! Ktoś wie, co może być przyczyną, że kod "Witaj świecie" nie działa na maszynie wirtualnej? – fanchyna

+0

Kod i MQ były uruchomione na VM? – robthewolf

Odpowiedz

12

najpierw włączyć konsolę zarządzania

sudo rabbitmq-plugins enable rabbitmq_management 

Następnie otwórz przeglądarkę

http://localhost:55672 

Zaloguj się z: guest/guest

W moim przypadku było to pamięć (poniżej 2 Giga) i pojawi się komunikat "Alarm wolnego miejsca na dysku dla tego węzła został przerwany, blokuje przychodzący ruch sieciowy do momentu, aż ilość wolnego miejsca przekroczy limit."

Edytuj plik /etc/rabbitmq/rabbitmq.config następująco:

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

Teraz ponownie uruchomić usługę królik:

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

Dzięki!Uruchamiając statusu sudo rabbitmqctl mam to: {disk_free_limit, 8335626240} {disk_free, 3692666880} i rzeczywiście jest to dysk wolny (RabbitMQ chce 8,3 GB, ale miałem tylko 3,6 GB). Jak zmienić limit wolnego dysku? –

+0

zaktualizował odpowiedź – danidacar

+0

+1 dla edycji, bardzo pomógł. Na początku myślałem, że jest źle napisane JSON, ale jak się okazało, nie jest, a przecinki i kropka na końcu są wymagane. Dzięki. – npclaudiu

0

trzeba zacząć Rabbit MQ Serever. W nazwie pliku Windows: RabbitMQ Service - start. Można użyć tego kodu:

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