2012-10-10 33 views
5

Estoy tratando de utilizar marco syfmony2 con RabbitMqBundle from hereSymfony2 y RabbitMqBundle. No se puede publicar un mensaje

Estoy seguro de que mi servidor RabbitMQ está en marcha y estoy haciendo el código de configuración y los editores de acuerdo a los documentos entregados en github. Lamentablemente, no puedo agregar ningún mensaje a la cola.

Estoy seguro de que mi servidor rabbitmq está en funcionamiento. Tengo una cola designada de acuerdo con el archivo de configuración de Symfony.

¿Alguien tiene alguna pista de lo que está mal?

Gracias de antemano por cualquier sugerencia.

Respuesta

10

bien ... prueba este sencillo ejemplo

# 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 

entonces usted debe definir su servicio de devolución de llamada. no dude en ponerlo en app/config.yml

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

y sí. deberías escribir este servicio de devolución de llamada. aquí hay una implementación simple. debería ser suficiente para entender y verificar si funciona para usted.

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

, entonces debería iniciar el servidor de rabbitmq, ejecutar el consumidor y verificar que se haya agregado el nuevo intercambio y la cola. para ejecutar consumidor prueba se debe ejecutar

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

en su controlador (en la que desea enviar el mensaje a RabbitMQ poner al lado de código

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

espero que sea más o menos clara y se le ayudará con RabbitMQ.

PS:. es más fácil de depurar si tiene plug-in de gestión RabbitMQ si no tiene, usar comandos de consola como rabbitmqctl para comprobar las colas/intercambios/consumidores y así sucesivamente ...

y también sería bueno ver su configuración para productores/consumidores. código de servicios de devolución de llamada también.

+0

Todo estaba bien en mi código pero tuve que ejecutar el consumo por un tiempo y luego todo fue bien. Gracias. –

0

También tuve algún problema para enviar mensajes con este paquete, te recomiendo que pruebes SonataNotificationBundle en su lugar.

También puede instalar RabbitMq management plugin para ver los mensajes en cola.

+0

Ya lo instalé pero ningún mensaje está en la cola –

+0

Y me gustaría terminar con el paquete de trabajo mencionado en la pregunta :) Pero gracias por responder de todos modos –

Cuestiones relacionadas