Spring 集成的 RabbitMQ 的练习
2015-08-26 16:03
447 查看
入门练习 1
pom.xml 文件配置:[code]<dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.4.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.7.RELEASE</version> </dependency>
spring 核心配置文件 rabbit-context.xml:
[code]<?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-1.0.xsd"> <rabbit:connection-factory id="connectionFactory" host="192.168.199.121" /> <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" /> <rabbit:admin connection-factory="connectionFactory" /> <rabbit:queue name="helloworld.queue"></rabbit:queue> </beans>
生产者代码:
[code]public class Producer { private static ApplicationContext context; public static void main(String[] args) { context = new ClassPathXmlApplicationContext("rabbit-context.xml"); AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class); amqpTemplate.convertAndSend("helloworld.queue", "Hello World Spring amqp"); } }
如果发送成功了,可以看到控制台显示:
[code]信息: Created new connection: SimpleConnection@2a40cd94 [delegate=amqp://guest@192.168.199.121:5672/]
消费者代码:
[code]public class Consumer { private static ApplicationContext context; public static void main(String[] args) { context = new ClassPathXmlApplicationContext("rabbit-context.xml"); AmqpTemplate amqpTemplate = context.getBean(AmqpTemplate.class); String receiveStr = (String) amqpTemplate.receiveAndConvert("helloworld.queue"); System.out.println(receiveStr); } }
入门练习 2
根据 Spring 官网的 AMQP 模块写的练习:pom.xml 片段(只用这一个片段)
[code]<dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.4.5.RELEASE</version> </dependency>
不使用任何配置文件发送消息:
[code]import org.springframework.amqp.core.Binding; import org.springframework.amqp.core.BindingBuilder; import org.springframework.amqp.core.Queue; import org.springframework.amqp.core.TopicExchange; import org.springframework.amqp.rabbit.connection.CachingConnectionFactory; import org.springframework.amqp.rabbit.core.RabbitAdmin; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer; import org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter; public class SpringRabbitDemo { public static void main(String[] args) throws InterruptedException { CachingConnectionFactory cf = new CachingConnectionFactory("192.168.199.121"); // RabbitAdmin 的作用感觉就是想是 Channel RabbitAdmin admin = new RabbitAdmin(cf); // 声明 queue Queue queue = new Queue("liwei-spring-queue"); admin.declareQueue(queue); // 声明交换器 TopicExchange exchange = new TopicExchange("liweiExchange"); admin.declareExchange(exchange); String routingKey = "foo.*"; Binding binding = BindingBuilder.bind(queue).to(exchange).with(routingKey ); admin.declareBinding(binding ); /** * 设置监听和容器 */ SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(cf); Object listner = new Object(){ public void handleMessage(String foo){ System.out.println("Object 内部的方法:" + foo); } }; MessageListenerAdapter adapter = new MessageListenerAdapter(listner); container.setMessageListener(adapter); container.setQueueNames("liwei-spring-queue"); container.start(); // 发送消息 RabbitTemplate template = new RabbitTemplate(cf); template.convertAndSend("liweiExchange","foo.bar","spring story"); Thread.sleep(1000); container.stop(); } }
控制台输出:
[code]八月 26, 2015 3:59:29 下午 org.springframework.amqp.rabbit.connection.CachingConnectionFactory createBareConnection 信息: Created new connection: SimpleConnection@4f47d241 [delegate=amqp://guest@192.168.199.121:5672/] Object 内部的方法:spring story 八月 26, 2015 3:59:30 下午 org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer doShutdown 信息: Waiting for workers to finish. 八月 26, 2015 3:59:30 下午 org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer doShutdown 信息: Successfully waited for workers to finish.
入门练习 3
该练习亦来自官网的 Quick Start,只不过将 Java 代码片段改成 Spring 的核心配置文件。pom.xml 文件片段:
[code]<dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.4.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.7.RELEASE</version> </dependency>
Spring 核心配置文件:
[code]<?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"> <rabbit:connection-factory id="connectionFactory" host="192.168.199.121"/> <rabbit:template id="amqpTemplate" connection-factory="connectionFactory" exchange="wudiexchange" routing-key="foo.bar"></rabbit:template> <rabbit:queue name="wudiQueue"></rabbit:queue> <!-- 路由设置,将队列绑定,topic 类型 --> <rabbit:topic-exchange name="wudiExchange"> <rabbit:bindings> <rabbit:binding pattern="foo.*" queue="wudiQueue"></rabbit:binding> </rabbit:bindings> </rabbit:topic-exchange> <!-- 监听类测试 --> <rabbit:listener-container connection-factory="connectionFactory"> <rabbit:listener ref="foo" method="listen" queue-names="wudiQueue"/> </rabbit:listener-container> <bean id="foo" class="com.liwei.SpringRabbitmq.Foo"></bean> </beans>
测试类文件:
通过spring 获得到连接,并发送消息。
[code]public class TestSpringRabbitMQ { private static AbstractApplicationContext ctx; public static void main(String[] args) throws InterruptedException { ctx = new ClassPathXmlApplicationContext("context.xml"); RabbitTemplate template = ctx.getBean(RabbitTemplate.class); template.convertAndSend("Spring Rain"); Thread.sleep(1000); ctx.destroy(); } }
Foo 类用于监听消息:
[code]public class Foo { public void listen(String foo ){ System.out.println("监听的消息:" + foo); } }
入门练习 4
什么配置文件都不要,简简单单地发送消息和接收消息。pom.xml 文件只用引入一个依赖。
[code]<dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.4.5.RELEASE</version> </dependency>
注意:先运行生产者,再运行消费者。
生产者:
[code]public class Producer { public static void main(String[] args) { CachingConnectionFactory connectionFactory = new CachingConnectionFactory("192.168.199.121"); AmqpAdmin admin = new RabbitAdmin(connectionFactory); admin.declareQueue(new Queue("myqueue")); AmqpTemplate template = new RabbitTemplate(connectionFactory); template.convertAndSend("myqueue", "Spring Rabbitmq"); } }
消费者:
[code]public class Consumer { public static void main(String[] args) { CachingConnectionFactory connectionFactory = new CachingConnectionFactory("192.168.199.121"); AmqpAdmin admin = new RabbitAdmin(connectionFactory); admin.declareQueue(new Queue("myqueue")); AmqpTemplate template = new RabbitTemplate(connectionFactory); String foo = (String) template.receiveAndConvert("myqueue"); System.out.println(foo); } }
入门练习 5
pom.xml[code]<dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.4.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.7.RELEASE</version> </dependency>
生产者:
[code]public class Send { private static AbstractApplicationContext ctx; public static void main(String[] args) { ctx = new ClassPathXmlApplicationContext("rabbitmq.xml"); AmqpTemplate template = ctx.getBean(AmqpTemplate.class); template.convertAndSend("guangQueue","周光"); ctx.destroy(); } }
消费者:
[code]public class Receive { private static AbstractApplicationContext ctx; public static void main(String[] args) { ctx = new ClassPathXmlApplicationContext("rabbitmq.xml"); AmqpTemplate template = ctx.getBean(AmqpTemplate.class); String receiveStr = (String) template.receiveAndConvert("guangQueue"); System.out.println(receiveStr); ctx.destroy(); } }
Spring 的核心配置文件:
[code]<?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"> <rabbit:connection-factory id="connFactory" host="192.168.199.121"/> <rabbit:template id="template" connection-factory="connFactory"></rabbit:template> <rabbit:admin connection-factory="connFactory" /> <rabbit:queue name="guangQueue"></rabbit:queue> </beans>
入门练习 6
pom.xml[code]<dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>1.4.5.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.1.7.RELEASE</version> </dependency>
Spring 核心配置文件:
[code]<?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"> <rabbit:connection-factory id="connFactory" host="192.168.199.121" /> <rabbit:template id="template" connection-factory="connFactory"></rabbit:template> <rabbit:admin connection-factory="connFactory" /> <rabbit:queue name="kunQueue"></rabbit:queue> </beans>
生产者代码:
[code]public class Send { private static AbstractApplicationContext ctx; public static void main(String[] args) { ctx = new ClassPathXmlApplicationContext("rabbitmq.xml"); AmqpTemplate template = ctx.getBean(AmqpTemplate.class); template.convertAndSend("kunQueue","龚友坤"); ctx.destroy(); } }
消费者代码:
[code]public class Receive { private static AbstractApplicationContext ctx; public static void main(String[] args) { ctx = new ClassPathXmlApplicationContext("rabbitmq.xml"); AmqpTemplate template = ctx.getBean(AmqpTemplate.class); String receiveStr = (String) template.receiveAndConvert("kunQueue"); System.out.println(receiveStr); ctx.destroy(); } }
相关文章推荐
- java设计模式
- mybatis集成spring操作数据库(注解方式)
- Spring MVC textbox example
- maven与springMVC之Controller
- SpringMVC核心思想详解
- java线程同步的小例子
- java深度模仿支付宝订单号/交易流水号(高性能,不重复)
- Spring定时任务的几种用法
- java获取汉字拼音首字母
- spring: 加载远程配置
- Java之m2eclipse插件安装
- Java多线程 -- 线程的交互
- Java Gossip: Statement、 ResultSet
- Eclipse中导入外部jar包
- spring事务回滚问题
- Java学习之String类
- ant jar error:Execute failed: java.io.IOException: Cannot run program XXX ${aapt}
- Java调用net的webservice故障排除实战分享
- 【Java】substring的用法
- 为什么要设置Java环境变量(详解)