2012-10-10 12 views
5

प्रकाशित नहीं कर सकता मैं साथ RabbitMqBundle from hereSymfony2 और RabbitMqBundle। संदेश

मुझे यकीन है कि मेरी RabbitMQ सर्वर और चल रहा है और मैं GitHub पर वितरित किए गए दस्तावेज़ों के विन्यास और प्रकाशकों कोड कर रहा हूँ उसके अनुसार है हूँ syfmony2 ढांचे का उपयोग करने के लिए कोशिश कर रहा हूँ। दुर्भाग्य से मैं कतार में कोई संदेश नहीं जोड़ सकता।

मुझे यकीन है कि मेरा rabbitmq सर्वर ऊपर और चल रहा है। मेरे पास सिम्फनी कॉन्फ़िगरेशन फ़ाइल के अनुसार नामित कतार है।

क्या किसी को कोई संकेत है कि क्या गलत है?

किसी भी सुझाव के लिए अग्रिम धन्यवाद।

उत्तर

10

ठीक है ... तो आप अपने कॉलबैक सेवा परिभाषित करना चाहिए कि सरल उदाहरण

# 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 

प्रयास करें। app/config.yml

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

और हाँ में इसे रखने में संकोच न करें। आपको यह कॉलबैक सेवा लिखनी चाहिए। यहां सरल कार्यान्वयन है। समझने और जांचने के लिए पर्याप्त होना चाहिए यह आपके लिए काम करता है।

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

तो आपको खरगोश सर्वर शुरू करना चाहिए, उपभोक्ता चलाएं और जांच नया एक्सचेंज और कतार जोड़ा गया था। परीक्षण उपभोक्ता को चलाने के लिए आप अपने नियंत्रक में

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

चलाना चाहिए (जहां

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

आशा है कि यह कम या ज्यादा स्पष्ट है और RabbitMQ के साथ तुम्हारी मदद करेगा अगले कोड डाल RabbitMQ को संदेश भेजना चाहते हैं।

पुनश्च:। यह डिबग करने के लिए यदि आप RabbitMQ प्रबंधन प्लगइन है आसान है अगर तुम नहीं, कंसोल उपयोग आदेशों rabbitmqctl कतारों/आदान-प्रदान/उपभोक्ताओं की जांच और इतने पर करने के लिए की तरह है ...

और उत्पादकों/उपभोक्ताओं के लिए आपकी कॉन्फ़िगरेशन देखना भी अच्छा लगेगा। कॉलबैक सेवा कोड भी।

+0

सबकुछ मेरे कोड में ठीक था लेकिन मुझे उपभोक्ता चलाने के लिए थोड़ी देर और फिर सब ठीक हो गया। धन्यवाद। –

0

मुझे इस बंडल के साथ संदेश भेजने के लिए कुछ समस्या भी थी, मैं आपको SonataNotificationBundle इसके बजाय प्रयास करने की सलाह देता हूं।

आप कतारबद्ध संदेश देखने के लिए RabbitMq management plugin भी इंस्टॉल कर सकते हैं।

+0

मैंने इसे पहले ही इंस्टॉल कर लिया है लेकिन –

+0

पर कोई संदेश कतारबद्ध नहीं किया जा रहा है और मैं प्रश्न में उल्लिखित कामकाजी बंडल के साथ समाप्त करना चाहता हूं :) लेकिन उत्तर के लिए धन्यवाद –