न्यूबी से खरगोश एमक्यू और जावा में नया उपयोग करते समय मैं खरगोश एमक्यू उपभोक्ता रद्दीकरण अधिसूचना को कैसे संभाल सकता हूं।स्प्रिंग चैनलएवेयर मैसेज लिस्टनर
मैं एक श्रोता लिखने का प्रयास कर रहा हूं जो मैन्युअल एएक्स का उपयोग करेगा और जावा स्प्रिंग एएमक्यूपी अमूर्तता का उपयोग कर उपभोक्ता रद्दीकरण अधिसूचनाओं को संभालेगा। क्या मैं वसंत अमूर्तता का उपयोग कर दोनों कार्यों को पूरा कर सकता हूं?
मैं एक श्रोता लिखना चाहता हूं जो एक कतार से संदेश खींच लेगा और उस संदेश को संसाधित करेगा (शायद डेटाबेस या कुछ लिखना)। मैंने मैन्युअल स्वीकृति का उपयोग करने की योजना बनाई ताकि संदेश की प्रसंस्करण विफल हो या किसी कारण से पूरा नहीं किया जा सके, तो मैं अस्वीकार कर सकता हूं और आवश्यकता कर सकता हूं। अब तक मुझे लगता है कि मैंने पाया है कि वसंत 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();
}