2012-10-10 12 views
5

Sto cercando di usare quadro syfmony2 con RabbitMqBundle from hereSymfony2 e RabbitMqBundle. Non è possibile pubblicare un messaggio

Sono sicuro che il mio server RabbitMQ è installato e funzionante e sto facendo il codice di configurazione e gli editori di conseguenza per la documentazione consegnati su github. Purtroppo non posso aggiungere alcun messaggio alla coda.

Sono sicuro che il mio server rabbitmq è attivo e funzionante. Ho chiamato in coda di conseguenza il file di configurazione di symfony.

Qualcuno ha idea di cosa c'è che non va?

Grazie in anticipo per eventuali suggerimenti.

risposta

10

bene ... Provate questo semplice esempio

# 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 

allora si dovrebbe definire il servizio di richiamata. sentitevi liberi di mettere in app/config.yml

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

e sì. dovresti scrivere questo servizio di callback. ecco una semplice implementazione. dovrebbe essere sufficiente per capire e verificare che funzioni per te

namespace RabbitMQ\Callback; 

use OldSound\RabbitMqBundle\RabbitMq\ConsumerInterface; 
use PhpAmqpLib\Channel\AMQPChannel; 
use PhpAmqpLib\Message\AMQPMessage; 

class Service implements ConsumerInterface 
{ 
    public function execute(AMQPMessage $msg) 
    { 
     var_dump(unserialize($msg->body)); 
    } 
}  

allora si dovrebbe avviare il server RabbitMQ, consumatori e controllo corsa era nuovo scambio e la coda ha aggiunto. per eseguire test presso i consumatori è necessario eseguire

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

nel controller (in cui si desidera inviare un messaggio a RabbitMQ inserire codice successivo

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

Spero che sia più o meno chiaro e vi aiuterà con RabbitMQ.

PS:. e 'più facile per eseguire il debug se si dispone di plug-in gestione RabbitMQ se non avete, i comandi della console l'uso come rabbitmqctl per controllare le code/scambi/consumatori e così via ...

e sarebbe bello vedere la tua configurazione per produttori/consumatori. anche il codice dei servizi di callback.

+0

Tutto andava bene nel mio codice ma dovevo eseguire il consumer per un po 'e poi tutto è andato bene. Grazie. –

0

Ho anche avuto qualche problema per inviare messaggi con questo pacchetto, ti consiglio di provare invece il SonataNotificationBundle.

È anche possibile installare RabbitMq management plugin per visualizzare i messaggi in coda.

+0

L'ho già installato ma nessun messaggio viene accodato –

+0

E vorrei finire con il pacchetto di lavoro menzionato nella domanda :) Ma grazie comunque per la risposta –

Problemi correlati