下面咱們經過一個實例看一下rabbit的使用。html
1.實現一個消息監聽器ReceiveMessageListener.javajava
[java] view plain copyspring
- package org.springframework.amqp.core;
-
- /**
- * Listener interface to receive asynchronous delivery of Amqp Messages.
- *
- * @author Mark Pollack
- */
- public interface MessageListener {
-
- void onMessage(Message message);
-
- }
2.消費者配置Consumer.xmljson
[html] view plain copyasync
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xmlns:rabbit="http://www.springframework.org/schema/rabbit"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/rabbit
- http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd">
-
- <!-- 鏈接服務配置 -->
- <rabbit:connection-factory id="connectionFactory" host="192.168.36.102" username="admin"
- password="admin" port="5672" virtual-host="/" channel-cache-size="5" />
-
- <rabbit:admin connection-factory="connectionFactory"/>
-
- <!-- queue 隊列聲明-->
- <rabbit:queue durable="true" auto-delete="false" exclusive="false" name="spring.queue.tag"/>
-
-
- <!-- exchange queue binging key 綁定 -->
- <rabbit:direct-exchange name="spring.queue.exchange" durable="true" auto-delete="false">
- <rabbit:bindings>
- <rabbit:binding queue="spring.queue.tag" key="spring.queue.tag.key"/>
- </rabbit:bindings>
- </rabbit:direct-exchange>
-
- <bean id="receiveMessageListener"
- class="cn.slimsmart.rabbitmq.demo.spring.tag.ReceiveMessageListener" />
-
- <!-- queue litener 觀察 監聽模式 當有消息到達時會通知監聽在對應的隊列上的監聽對象-->
- <rabbit:listener-container connection-factory="connectionFactory" acknowledge="auto" >
- <rabbit:listener queues="spring.queue.tag" ref="receiveMessageListener" />
- </rabbit:listener-container>
- </beans>
3.生產者配置Producer.xml.net
[html] view plain copy插件
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
- xmlns:rabbit="http://www.springframework.org/schema/rabbit"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context.xsd
- http://www.springframework.org/schema/rabbit
- http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd">
-
- <!-- 鏈接服務配置 -->
- <rabbit:connection-factory id="connectionFactory"
- host="192.168.36.102" username="admin" password="admin" port="5672"
- virtual-host="/" channel-cache-size="5" />
-
- <rabbit:admin connection-factory="connectionFactory" />
-
- <!-- queue 隊列聲明 -->
- <rabbit:queue durable="true"
- auto-delete="false" exclusive="false" name="spring.queue.tag" />
-
-
- <!-- exchange queue binging key 綁定 -->
- <rabbit:direct-exchange name="spring.queue.exchange"
- durable="true" auto-delete="false">
- <rabbit:bindings>
- <rabbit:binding queue="spring.queue.tag" key="spring.queue.tag.key" />
- </rabbit:bindings>
- </rabbit:direct-exchange>
-
- <!-- spring amqp默認的是jackson 的一個插件,目的將生產者生產的數據轉換爲json存入消息隊列,因爲Gson的速度快於jackson,這裏替換爲Gson的一個實現 -->
- <bean id="jsonMessageConverter"
- class="cn.slimsmart.rabbitmq.demo.spring.tag.Gson2JsonMessageConverter" />
-
- <!-- spring template聲明 -->
- <rabbit:template id="amqpTemplate" exchange="spring.queue.exchange" routing-key="spring.queue.tag.key"
- connection-factory="connectionFactory" message-converter="jsonMessageConverter" />
- </beans>
4.消費者啓動類ConsumerMain.javaxml
[java] view plain copyhtm
- package cn.slimsmart.rabbitmq.demo.spring.tag;
-
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- public class ConsumerMain {
-
- public static void main(String[] args) {
- new ClassPathXmlApplicationContext("Consumer.xml");
- }
- }
5.生產者啓動類ProducerMain.java對象
[java] view plain copy
- package cn.slimsmart.rabbitmq.demo.spring.tag;
-
- import org.springframework.amqp.core.AmqpTemplate;
- import org.springframework.amqp.rabbit.core.RabbitTemplate;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.ClassPathXmlApplicationContext;
-
- public class ProducerMain {
-
- public static void main(String[] args) {
- ApplicationContext context = new ClassPathXmlApplicationContext("Producer.xml");
- AmqpTemplate amqpTemplate = context.getBean(RabbitTemplate.class);
- User user = new User();
- user.setName("niuniu");
- amqpTemplate.convertAndSend(user);
- }
- }
先啓動消費者,監聽接收消息,再啓動生產者發送消息。
輸出: data :{"name":"niuniu"}
以下4中轉發器類型標籤
rabbit:fanout-exchange
rabbit:direct-exchange
rabbit:topic-exchange
rabbit:headers-exchange