मेरे पास तीन क्लाइंट हैं जिनमें से प्रत्येक अपने स्वयं के खरगोश एमक्यू उदाहरण हैं और मेरे पास एक एप्लिकेशन है (चलिए इसे एपीए कहते हैं) जिसमें इसका अपना खरगोश एमक्यू उदाहरण है, तीन क्लाइंट एप्लिकेशन (एप 1, एप 2, एप 3) चाहता है एपीए पर एक सेवा का उपयोग करें।कई खरगोशों में खरगोश एमक्यू आरपीसी एमक्यू उदाहरण
एपीए की सेवा के लिए आरपीसी संचार, एप 1, ऐप 2 और एप 3 की आवश्यकता है प्रत्येक के पास बुकिंग है। रिक्वेस्ट कतार और बुकिंग। प्रतिक्रिया कतार।
फावड़ा प्लगइन के साथ, मैं अप्पा को app1-3 से सभी booking.request संदेशों को अग्रेषित कर सकते हैं:
Shovel1
virtualHost=appA,
name=booking-request-shovel,
sourceURI=amqp://userForApp1:[email protected]/vhostForApp1
queue=booking.request
destinationURI=amqp://userForAppA:[email protected]/vhostForAppA
queue=booking.request
setup another shovel to get booking requests from app2 and app3 to appA in the same way as above.
अब अप्पा booking.response कतार पर अनुरोध का जवाब देगा, मुझे सही बुकिंग पर वापस जाने के लिए rabbitMQ-appA पर बुकिंग प्रतिक्रिया संदेश की आवश्यकता है। ऐप 1, ऐप 2 या ऐप 3 पर प्रतिक्रिया कतार, लेकिन उन सभी के लिए नहीं - मैं rabbitMQ-appA पर एक फावड़ा/संघीय कतार कैसे स्थापित करूं प्रतिक्रिया को सही खरगोश एमक्यू (एप 1, एप 2, एपी 3) पर वापस भेज दें जो उनकी बुकिंग में प्रतिक्रिया की उम्मीद कर रहा है। प्रतिक्रिया q ueue?
इन सभी क्षुधा वसंत-AMQP (मामले कि प्रासंगिक है में) उपयोग कर रहे हैं वैकल्पिक रूप से, मैं सेटअप वसंत में एक RabbitMQ टेम्पलेट कि कई RabbitMQ कतारों को सुनता है और उनमें से प्रत्येक से खपत कर सकते थे।
डॉक्स से, यह है कि क्या एक विशिष्ट उपभोक्ता लगता है:
<rabbit:listener-container connection-factory="rabbitConnectionFactory">
<rabbit:listener queues="some.queue" ref="somePojo" method="handle"/>
</rabbit:listener-container>
यह भले ही कनेक्शन कारखानों RabbitMQ का एक ही उदाहरण के लिए कर रहे हैं ऐसा करने के लिए एक से अधिक कनेक्शन कारखानों निर्दिष्ट करने के लिए संभव है, लेकिन बस विभिन्न vhosts:
अद्यतन:
जोश के जवाब के आधार पर, मैं कई कनेक्शन कारखानों होगा:
<rabbit:connection-factory
id="connectionFactory1"
port="${rabbit.port1}"
virtual-host="${rabbit.virtual1}"
host="${rabbit.host1}"
username="${rabbit.username1}"
password="${rabbit.password1}"
connection-factory="nativeConnectionFactory" />
<rabbit:connection-factory
id="connectionFactory2"
port="${rabbit.port2}"
virtual-host="${rabbit.virtual2}"
host="${rabbit.host2}"
username="${rabbit.username2}"
password="${rabbit.password2}"
connection-factory="nativeConnectionFactory" />
तब मैं SimpleRoutingConnectionFactory का प्रयोग करेंगे दोनों कनेक्शन-कारखानों रैप करने के लिए:
<bean id="connectionFactory" class="org.springframework.amqp.rabbit.connection.SimpleRoutingConnectionFactory">
<property name="targetConnectionFactories">
<map>
<entry key="#{connectionFactory1.virtualHost}" ref="connectionFactory1"/>
<entry key="#{connectionFactory2.virtualHost}" ref="connectionFactory2"/>
</map>
</property>
</bean>
अब जब मैं अपने RabbitMQ टेम्पलेट का ऐलान करते हैं मैं अलग-अलग कनेक्शन कारखानों के बजाय SimpleRoutingConnectionFactory को इंगित होगा:
<rabbit:template id="template" connection-factory="connectionFactory" />
... और फिर अस्थायी का उपयोग देर से मैं सामान्य रूप से यह प्रयोग करेंगे के रूप में ...
<rabbit:listener-container
connection-factory="connectionFactory"
channel-transacted="true"
requeue-rejected="true"
concurrency="${rabbit.consumers}">
<rabbit:listener queues="${queue.booking}" ref="TransactionMessageListener" method="handle" />
</rabbit:listener-container>
// और संदेश दोनों RabbitMQ उदाहरणों
से खपत होती है ... और ...
@Autowired
private AmqpTemplate template;
template.send(getExchange(), getQueue(), new Message(gson.toJson(message).getBytes(), properties));
// और संदेश को प्रकाशित करता है दोनों कतारों के लिए
क्या मैं सही हूँ?
सारराउटिंग कनेक्शन कनेक्शन फैक्ट्री वादा करता है, क्या आपके पास इसका उदाहरण है कि आप इसका उपयोग कैसे करते हैं? क्या निर्धारित किया जाता है CurrentLookupKey के लिए इस्तेमाल किया जा रहा है? –
यहां वसंत दस्तावेज़ है। [http://docs.spring.io/spring-amqp/docs/1.3.0.M1/reference/html/amqp.html#routing-connection-factory](http://docs.spring.io/spring- AMQP/docs/1.3.0.M1/संदर्भ/html/amqp.html # मार्ग-कनेक्शन-कारखाना)। अगर आपको उस दस्तावेज़ को पढ़ने के बाद कोई प्रश्न है तो मुझे बताएं। –
दस्तावेज़ के आधार पर, मैंने अपना प्रश्न अपडेट किया है ... संक्षेप में, SimpleRoutingConnectionFactory एकाधिक कनेक्शन कारखानों को लपेटता है और फिर उसी कनेक्शन कारखाने के समान उपयोग किया जा सकता है, क्या यह सही है? –