1.分別建一個發消息的rabbitmq和接消息的rabbitmqjava
而且發消息發兩個不一樣的q,接消息也接不一樣的Qspring
2.先是發消息的項目producerapache
pom.xml服務器
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.rabbitmq</groupId> <artifactId>com-rabbitmq-producer</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <!-- RabbitMQ --> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.4.5.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.8.RELEASE</version> </dependency> </dependencies> </project>
RabbitMQProducerService.javamaven
package com.rabbitmq.producer.service; public interface RabbitMQProducerService { public void sendMessage(String message); public void sendMessageyy(String message); }
RabbitMQProducerServiceImpl.javaui
package com.rabbitmq.producer.service.impl; import org.springframework.amqp.core.AmqpTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.rabbitmq.producer.service.RabbitMQProducerService; @Service("rabbitMQProducerService") public class RabbitMQProducerServiceImpl implements RabbitMQProducerService { @Autowired private AmqpTemplate amqpTemplate; public void sendMessage(String message) { //guilfrrrrrrr爲配置文件中queue對應的key,指明發送給哪一個queue。 amqpTemplate.convertAndSend("guilfrrrrrrr",message); } public void sendMessageyy(String message) { //guilfrrrrrrr爲配置文件中queue對應的key,指明發送給哪一個queue。 amqpTemplate.convertAndSend("guilfyyyy",message); } }
spring.xmlspa
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" > <!-- 掃描文件(自動將servicec層注入) --> <context:component-scan base-package="com.rabbitmq.producer.service"/> </beans>
mq-config.xml3d
<?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: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/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd"> <!-- RabbitMQ 經過參數建立工廠--> <rabbit:connection-factory id="rabbitConnectionFactory" addresses="192.168.88.134" username="admin" password="admin"/> <!--經過指定下面的admin信息,當前producer中的exchange和queue會在rabbitmq服務器上自動生成--> <rabbit:admin connection-factory="rabbitConnectionFactory" /> <!-- queue 隊列聲明 聲明不一樣的Q,這Q會顯示在RabbitMQ頁面上--> <rabbit:queue durable="true" auto-delete="false" exclusive="false" name="guilfRabbitmqtt"/> <rabbit:queue durable="true" auto-delete="false" exclusive="false" name="guilfRabbitmqyy"/> <!-- 定義direct exchange,綁定com.mj.test queue 一個queue是顯示在RabbitMQ頁面上,key跟實現類裏面的key同樣--> <rabbit:direct-exchange name="guitttttttttt"> <rabbit:bindings> <rabbit:binding queue="guilfRabbitmqtt" key="guilfrrrrrrr" /> <rabbit:binding queue="guilfRabbitmqyy" key="guilfyyyy" /> </rabbit:bindings> </rabbit:direct-exchange> <!--定義rabbit template用於數據的接收和發送 amqpTemplate這個會在實現裏面注入發送消息--> <rabbit:template id="amqpTemplate" connection-factory="rabbitConnectionFactory" exchange="guitttttttttt" /> </beans>
RabbitMQTest.javacode
import org.junit.Test; import org.junit.Before; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.rabbitmq.producer.service.RabbitMQProducerService; public class RabbitMQTest { private RabbitMQProducerService rabbitMQProducerService; @Before public void before(){ @SuppressWarnings("resource") ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"classpath:conf/spring.xml", "classpath:conf/mq-config.xml"}); rabbitMQProducerService = (RabbitMQProducerService) context.getBean("rabbitMQProducerService"); } @Test public void testSend1() { try { rabbitMQProducerService.sendMessage("my first rabbitmq send1!"); } catch (Exception e) { e.printStackTrace(); } } @Test public void testSend2() { try { rabbitMQProducerService.sendMessageyy("my first rabbitmq send2!"); } catch (Exception e) { e.printStackTrace(); } } }
獲得結果component
2.監聽Q並消費掉 comsumer,這裏就有兩個消費
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.rabbitmq</groupId> <artifactId>com-rabbitmq-comsumer</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <!-- RabbitMQ --> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>3.5.1</version> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.4.5.RELEASE</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.8.RELEASE</version> </dependency> </dependencies> </project>
spring.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd" > <!-- 掃描文件(自動將servicec層注入) --> <context:component-scan base-package="com.rabbitmq.producer.service"/> </beans>
mq-config.xml
<?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: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/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd"> <!-- RabbitMQ 獲得工廠--> <rabbit:connection-factory id="rabbitConnectionFactory" addresses="192.168.88.134" username="admin" password="admin"/> <rabbit:admin connection-factory="rabbitConnectionFactory" />
<!--監聽-->
<rabbit:listener-container connection-factory="rabbitConnectionFactory" acknowledge="auto">
<rabbit:listener queue-names="guilfRabbitmqtt" ref="messageListenertt" />
<rabbit:listener queue-names="guilfRabbitmqyy" ref="messageListeneryy" />
</rabbit:listener-container>
</beans>
RabbitMQComsumerttService.java
package com.rabbitmq.comsumer.service; public interface RabbitMQComsumerttService { public void sendMessage(String message); }
RabbitMQComsumeryyService.java
package com.rabbitmq.comsumer.service; public interface RabbitMQComsumeryyService { public void sendMessageyy(String message); }
RabbitMQProducerttServiceImpl.java
package com.rabbitmq.comsumer.service.impl; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageListener; import org.springframework.stereotype.Service; import com.rabbitmq.comsumer.service.RabbitMQComsumerttService; @Service("messageListenertt") public class RabbitMQProducerttServiceImpl implements RabbitMQComsumerttService,MessageListener { public void sendMessage(String message) { System.out.println(message+"tt"); } public void onMessage(Message message) { String msg = new String(message.getBody()); System.out.println(msg+"tt"); sendMessage(msg); } }
RabbitMQProduceryyServiceImpl.java
package com.rabbitmq.comsumer.service.impl; import org.springframework.amqp.core.Message; import org.springframework.amqp.core.MessageListener; import org.springframework.stereotype.Service; import com.rabbitmq.comsumer.service.RabbitMQComsumeryyService; @Service("messageListeneryy") public class RabbitMQProduceryyServiceImpl implements RabbitMQComsumeryyService,MessageListener { public void sendMessageyy(String message) { System.out.println(message+"yy"); } public void onMessage(Message message) { String msg = new String(message.getBody()); System.out.println(msg+"yy"); sendMessageyy(msg); } }
TestMain.java
import java.io.IOException; import org.junit.runner.RunWith; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.context.support.GenericXmlApplicationContext; /** * 應用啓動入口類 */ public class TestMain { public static void main(String[] args) { @SuppressWarnings("resource") ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( new String[]{"classpath:conf/spring.xml","classpath:conf/mq-config.xml"}); context.start(); System.out.println("Press any key to exit."); try { System.in.read(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
啓動獲得