依賴包:
<!--RabbitMQ集成spring--> <!-- https://mvnrepository.com/artifact/org.springframework.amqp/spring-rabbit --> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>2.0.6.RELEASE</version> </dependency>
消息者Spring配置文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:rabbit="http://www.springframework.org/schema/rabbit" 6 xsi:schemaLocation=" 7 http://www.springframework.org/schema/beans 8 http://www.springframework.org/schema/beans/spring-beans.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context.xsd 11 http://www.springframework.org/schema/rabbit 12 http://www.springframework.org/schema/rabbit/spring-rabbit-1.0.xsd"> 13 14 <!-- 連接服務配置 --> 15 <rabbit:connection-factory id="connectionFactory" 16 host="10.15.1.26" username="admin" password="admin" port="5672" 17 virtual-host="/test_host" channel-cache-size="5"/> 18 19 <!--MQ的管理,包括隊列、交換器的聲明等--> 20 <rabbit:admin connection-factory="connectionFactory"/> 21 22 <!-- queue 隊列聲明 --> 23 <rabbit:queue durable="true" 24 auto-delete="false" exclusive="false" name="test.spring.queue"/> 25 26 <!-- exchange queue binging key 綁定 --> 27 <rabbit:direct-exchange name="spring.exchange" 28 durable="true" auto-delete="false"> 29 <rabbit:bindings> 30 <rabbit:binding queue="test.spring.queue" key="spring.queue.key"/> 31 </rabbit:bindings> 32 </rabbit:direct-exchange> 33 34 <!-- spring template聲明 --> 35 <rabbit:template id="amqpTemplate" exchange="spring.exchange" routing-key="spring.queue.key" 36 connection-factory="connectionFactory"/> 37 38 39 <!-- 監聽生產者發送的消息開始 --> 40 41 <!-- 聲明消息轉換器為SimpleMessageConverter --> 42 <bean id="messageConverter" 43 class="org.springframework.amqp.support.converter.SimpleMessageConverter"> 44 </bean> 45 46 <!-- 用於接收消息的處理類 --> 47 <bean id="myListener" class="org.study.model.MyListener"/> 48 49 <!-- 用於消息的監聽的代理類MessageListenerAdapter --> 50 <bean id="receiveListenerAdapter" 51 class="org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter"> 52 <constructor-arg ref="myListener" /> 53 <property name="defaultListenerMethod" value="onMessage"></property> 54 </bean> 55 56 <!-- 用於消息的監聽的容器類SimpleMessageListenerContainer,對於queueName的值一定要與定義的Queue的值相同 --> 57 <bean id="listenerContainer" 58 class="org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer"> 59 <property name="queueNames" value="test.spring.queue"></property> 60 <property name="connectionFactory" ref="connectionFactory"></property> 61 <property name="messageListener" ref="receiveListenerAdapter"></property> 62 </bean> 63 64 </beans>
消費者消息處理代碼:
1 package org.study.model; 2 3 /** 4 * RabbitMQ與Spring整合 5 * 消費者消息處理類 6 */ 7 public class MyListener { 8 public void onMessage(String message) { 9 System.out.println(" [RECV] : " + message); 10 } 11 12 }
運行代碼:
1 package org.study.spring5; 2 3 import org.springframework.context.ApplicationContext; 4 import org.springframework.context.support.ClassPathXmlApplicationContext; 5 6 /** 7 * RabbitMQ與Spring整合 8 * 消費者 9 */ 10 public class SpringConsumer { 11 12 public static void main(String args[]) { 13 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring/consumer-spring-config.xml"); 14 15 } 16 }