2012-10-10 8 views
5

Ich versuche syfmony2 Framework zu verwenden mit RabbitMqBundle from hereSymfony2 und RabbitMqBundle. Kann nicht eine Nachricht

Ich bin sicher, dass mein rabbitmq Server ist bis veröffentlichen und läuft und ich die Konfiguration und Verlegern Code entsprechend auf Github zu liefernde die Dokumentation zu tun. Leider kann ich der Warteschlange keine Nachricht hinzufügen.

Ich bin sicher, dass mein Rabbitmq-Server läuft. Ich habe die Warteschlange entsprechend der Symfony-Konfigurationsdatei benannt.

Hat jemand irgendeine Ahnung, was ist los?

Vielen Dank im Voraus für Anregungen.

Antwort

10

gut ... versuchen Sie dieses einfache Beispiel

# app/config.yml 
old_sound_rabbit_mq: 
    connections: %rabbitmq_connections% 
    producers: %rabbitmq_producers% 
    consumers: %rabbitmq_consumers% 

parameters: 
    # connection parameters 
    rabbitmq_connections: 
     default: { host: 'localhost', port: 5672, user: 'guest', password: 'guest', vhost: '/' } 

    # define producers 
    rabbitmq_producers: 
     sample: 
      connection:   default 
      exchange_options: {name: 'exchange_name', type: direct, auto_delete: false, durable: true} 

    # define consumers 
    rabbitmq_consumers: 
     sample: 
      connection:   default 
      exchange_options: {name: 'exchange_name', type: direct, auto_delete: false, durable: true} 
      queue_options:  {name: 'sample', auto_delete: false} 
      callback:   rabbitmq.callback.service 

dann sollten Sie Ihren Rückruf-Service definieren. fühlen Sie sich frei, um es in app/config.yml

services: 
    rabbitmq.callback.service: 
     class: RabbitMQ\Callback\Service 

und ja. Sie sollten diesen Rückrufdienst schreiben. Hier ist eine einfache Implementierung. sollte genug sein, um zu verstehen und zu überprüfen, ob es für dich funktioniert.

dann sollten Sie Rabbitmq Server starten, Consumer ausführen und überprüfen wurde neue Exchange und Warteschlange hinzugefügt. Test Verbraucher laufen Sie

app/console rabbitmq:consumer sample --route="sample" 

in Ihrem Controller ausgeführt werden soll (wo Sie Nachricht an RabbitMQ setzen nächste Code

# get producer service 
$producer = $this->get('old_sound_rabbit_mq.sample_producer'); 
# publish message 
$producer->publish(serialize(array('foo'=>'bar','_FOO'=>'_BAR')), 'sample'); 

Hoffe, es ist mehr oder weniger klar senden möchten, und werden Sie mit rabbitmq helfen.

. PS: es ist einfacher zu debuggen, wenn Sie rabbitmq Management-Plugin haben, wenn Sie keine haben, verwenden Sie die Konsolenbefehle wie rabbitmqctl Warteschlangen/Börsen/Verbraucher zu überprüfen und so weiter ...

und wäre auch schön, Ihre Konfiguration für Produzenten/Verbraucher zu sehen. Rückruf-Service-Code auch.

+0

Alles war in Ordnung in meinem Code, aber ich musste Verbraucher für laufen eine Weile und dann ging alles gut. Danke. –

0

Ich hatte auch ein Problem, Nachrichten mit diesem Bündel zu senden, ich empfehle Ihnen, stattdessen SonataNotificationBundle zu versuchen.

Sie können auch die RabbitMq management plugin installieren, um die Nachrichten in der Warteschlange anzuzeigen.

+0

Ich habe es bereits installiert, aber keine Nachricht wird in die Warteschlange gestellt –

+0

Und ich würde gerne mit Arbeitsbündel in der Frage erwähnt :) Aber danke für die Antwort trotzdem –

Verwandte Themen