2013-06-12 9 views
9

न्यूबी से खरगोश एमक्यू और जावा में नया उपयोग करते समय मैं खरगोश एमक्यू उपभोक्ता रद्दीकरण अधिसूचना को कैसे संभाल सकता हूं।स्प्रिंग चैनलएवेयर मैसेज लिस्टनर

मैं एक श्रोता लिखने का प्रयास कर रहा हूं जो मैन्युअल एएक्स का उपयोग करेगा और जावा स्प्रिंग एएमक्यूपी अमूर्तता का उपयोग कर उपभोक्ता रद्दीकरण अधिसूचनाओं को संभालेगा। क्या मैं वसंत अमूर्तता का उपयोग कर दोनों कार्यों को पूरा कर सकता हूं?

मैं एक श्रोता लिखना चाहता हूं जो एक कतार से संदेश खींच लेगा और उस संदेश को संसाधित करेगा (शायद डेटाबेस या कुछ लिखना)। मैंने मैन्युअल स्वीकृति का उपयोग करने की योजना बनाई ताकि संदेश की प्रसंस्करण विफल हो या किसी कारण से पूरा नहीं किया जा सके, तो मैं अस्वीकार कर सकता हूं और आवश्यकता कर सकता हूं। अब तक मुझे लगता है कि मैंने पाया है कि वसंत AMQP का उपयोग करके मैन्युअल रूप से एक/नाक/अस्वीकार करने के लिए मुझे ChannelAwareMessageListener का उपयोग करना होगा।

मुझे एहसास है कि मुझे खरगोश एमक्यू से उपभोक्ता रद्दीकरण अधिसूचनाओं को संभालना चाहिए, हालांकि ChannelAwareMessageListener का उपयोग करके मुझे वास्तव में इसके लिए कोड करने का कोई तरीका नहीं दिख रहा है। सीसीएन को संभालने का एकमात्र तरीका यह है कि channel.basicConsume() पर कॉल करके निचले स्तर के जावा क्लाइंट एपीआई का उपयोग करके कोड लिखना और DefaultConsumer इंस्टेंस पास करना जो आपको संदेश वितरण और कैंसल को संभालने की अनुमति देता है।

मैं यह भी नहीं देखता कि ConnectionFactory पर ब्रोकर को बताएं कि मैं clientProperties पर ब्रोकर को बता सकता हूं क्योंकि मैं कॉन्फ़िगरेशन में बीन से कारखाना प्राप्त कर रहा हूं।

श्रोता का मेरा छद्म कोड और कंटेनर का निर्माण नीचे है।

public class MyChannelAwareListener implements ChannelAwareMessageListener 
{ 
    @Override 
    public void onMessage(Message message, Channel channel) throws Exception 
    { 
     msgProcessed = processMessage(message); 

     if(msgProcessed)  
      channel.basicAck(message.getMessageProperties().getDeliveryTag(), false); 
     else 
      channel.basicReject(message.getMessageProperties().getDeliveryTag(), true); 
    } 
} 

public static void main(String[] args) throws Exception 
{ 
    ConnectionFactory rabbitConnectionFactory; 
    ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext (MY_CONTEXT_PATH); 
    rabbitConnectionFactory = (ConnectionFactory)ctx.getBean("rabbitConnectionFactory"); 

    SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); 

    MyChannelAwareListener listener = new MyChannelAwareListener(); 
    container.setMessageListener(listener); 
    container.setQueueNames("myQueue"); 
    container.setConnectionFactory(rabbitConnectionFactory); 
    container.setAcknowledgeMode(AcknowledgeMode.MANUAL); 
    container.start(); 
} 

उत्तर

1

ग्राहक गुण आप ConnectionFactory में setClientProperties विधि का उपयोग करने की जरूरत है स्थापित करने के लिए (इस ConnectionFactory संभालने RabbitMQ जावा पुस्तकालय से वस्तु है)। यह विधि Map<String, Object> की अपेक्षा कर रही है जिसमें ग्राहक और क्षमताओं के गुण शामिल हैं। ,

Map<String,Object> props = new HashMap<String, Object>(); 
props.put("product", LongStringHelper.asLongString("RabbitMQ")); 
props.put("version", LongStringHelper.asLongString(ClientVersion.VERSION)); 
props.put("platform", LongStringHelper.asLongString("Java")); 
props.put("copyright", LongStringHelper.asLongString(Copyright.COPYRIGHT)); 
props.put("information", LongStringHelper.asLongString(Copyright.LICENSE)); 

Map<String, Object> capabilities = new HashMap<String, Object>(); 
capabilities.put("publisher_confirms", true); 
capabilities.put("exchange_exchange_bindings", true); 
capabilities.put("basic.nack", true); 
capabilities.put("consumer_cancel_notify", true); 

props.put("capabilities", capabilities); 

ACKs के प्रबंधन और उपभोक्ता रद्द मैं कैसे स्प्रिंग AMQP अमूर्त के साथ यह करने के लिए यकीन नहीं है के लिए, लेकिन यह channel.basicConsume जो आप देता है के साथ पूरी तरह से संभव है: निम्नलिखित लाइनों RabbitMQ जावा पुस्तकालय के अंदर डिफ़ॉल्ट मान संभावना सभी कॉलबैक विधियों के माध्यम से सभी स्थितियों को संभालने के लिए:

http://www.rabbitmq.com/releases/rabbitmq-java-client/v3.1.5/rabbitmq-java-client-javadoc-3.1.5/

आशा इस मदद करता है!

संबंधित मुद्दे