RabbitMQ入门-10-3(整合spring-发送异步消息注解实现)
来源:互联网 发布:富春山居图有多烂 知乎 编辑:程序博客网 时间:2024/06/05 17:57
写在前面的话
系列教程都是从网络上收集和本人的理解所编辑而成,仅供广大爱好者学习所用,请尊重本人的劳动成果。欢迎评论指正和转帖!(请保留连接谢谢!)
一、项目结构
二、POM.XML
<?xml version="1.0" encoding="UTF-8"?><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>rabbitmq_spring_3_3</artifactId> <version>1.0-SNAPSHOT</version> <properties> <rabbitmq.version>3.0.4</rabbitmq.version> <spring.amqp.version>1.1.1.RELEASE</spring.amqp.version> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <spring.version>3.1.2.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>cglib</groupId> <artifactId>cglib</artifactId> <version>2.2.2</version> </dependency> <dependency> <groupId>com.rabbitmq</groupId> <artifactId>amqp-client</artifactId> <version>${rabbitmq.version}</version> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-rabbit</artifactId> <version>${spring.amqp.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> <exclusions> <!-- Exclude Commons Logging in favor of SLF4j --> <exclusion> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.8.1</version> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.amqp</groupId> <artifactId>spring-amqp</artifactId> <version>${spring.amqp.version}</version> <classifier>sources</classifier> <scope>compile</scope> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.5.10</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>1.5.10</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.5.10</version> <scope>runtime</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> <scope>runtime</scope> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.6.9</version> </dependency> </dependencies> <build> <finalName>rabbitmq_spring_3_3</finalName> <plugins> <!-- java编译插件 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build></project>
三、Producer.java
package com.rabbitmq;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Producer { public static void main(String[] args) { new AnnotationConfigApplicationContext(ProducerConfiguration.class); }}
package com.rabbitmq;import java.util.concurrent.atomic.AtomicInteger;import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;import org.springframework.amqp.rabbit.connection.ConnectionFactory;import org.springframework.amqp.rabbit.core.RabbitTemplate;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.config.BeanPostProcessor;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.Scheduled;import org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor;import com.rabbitmq.client.AMQP;@Configurationpublic class ProducerConfiguration { // 指定队列名称 routingkey的名称默认为Queue的名称,使用Exchange类型为DirectExchange protected final String helloWorldQueueName = "spring-queue-async"; // 创建链接 @Bean public ConnectionFactory connectionFactory() { CachingConnectionFactory connectionFactory = new CachingConnectionFactory("192.168.0.117"); connectionFactory.setUsername("admin"); connectionFactory.setPassword("admin"); connectionFactory.setPort(AMQP.PROTOCOL.PORT); return connectionFactory; } // 创建rabbitTemplate 消息模板类 @Bean public RabbitTemplate rabbitTemplate() { RabbitTemplate template = new RabbitTemplate(connectionFactory()); template.setRoutingKey(this.helloWorldQueueName); return template; } //创建一个调度 @Bean public ScheduledProducer scheduledProducer() { return new ScheduledProducer(); } @Bean public BeanPostProcessor postProcessor() { return new ScheduledAnnotationBeanPostProcessor(); } static class ScheduledProducer { @Autowired private volatile RabbitTemplate rabbitTemplate; //自增整数 private final AtomicInteger counter = new AtomicInteger(); /** * 每3秒发送一条消息 * * Spring3中加强了注解的使用,其中计划任务也得到了增强,现在创建一个计划任务只需要两步就完成了: 创建一个Java类,添加一个无参无返回值的方法,在方法上用@Scheduled注解修饰一下; 在Spring配置文件中添加三个<task:**** />节点; 参考:http://zywang.iteye.com/blog/949123 */ @Scheduled(fixedRate = 3000) public void sendMessage() { rabbitTemplate.convertAndSend("Hello World " + counter.incrementAndGet()); } }}
五、Consumer.java
package com.rabbitmq;import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class Consumer { public static void main(String[] args) { new AnnotationConfigApplicationContext(ConsumerConfiguration.class); }}
六、ConsumerConfiguration.java
package com.rabbitmq;import org.springframework.amqp.core.AmqpAdmin;import org.springframework.amqp.core.Queue;import org.springframework.amqp.rabbit.connection.CachingConnectionFactory;import org.springframework.amqp.rabbit.connection.ConnectionFactory;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;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import com.rabbitmq.client.AMQP;@Configurationpublic class ConsumerConfiguration { // 指定队列名称 routingkey的名称默认为Queue的名称,使用Exchange类型为DirectExchange protected String springQueueDemo = "spring-queue-async"; // 创建链接 @Bean public ConnectionFactory connectionFactory() { CachingConnectionFactory connectionFactory = new CachingConnectionFactory( "192.168.0.117"); connectionFactory.setUsername("admin"); connectionFactory.setPassword("admin"); connectionFactory.setPort(AMQP.PROTOCOL.PORT); return connectionFactory; } // 创建rabbitAdmin 代理类 @Bean public AmqpAdmin amqpAdmin() { return new RabbitAdmin(connectionFactory()); } // 创建rabbitTemplate 消息模板类 @Bean public RabbitTemplate rabbitTemplate() { RabbitTemplate template = new RabbitTemplate(connectionFactory()); // The routing key is set to the name of the queue by the broker for the // default exchange. template.setRoutingKey(this.springQueueDemo); // Where we will synchronously receive messages from template.setQueue(this.springQueueDemo); return template; } // // Every queue is bound to the default direct exchange public Queue helloWorldQueue() { return new Queue(this.springQueueDemo); } @Bean public SimpleMessageListenerContainer listenerContainer() { SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(); container.setConnectionFactory(connectionFactory()); container.setQueueNames(this.springQueueDemo); container.setMessageListener(new MessageListenerAdapter( new ReceiveMsgHandler())); return container; }}
七、ReceiveMsgHandler.java
package com.rabbitmq;public class ReceiveMsgHandler { public void handleMessage(String text) { System.out.println("Received: " + text); }}
写在后面的话
The worldi is like mirror:Frown at itand it frowns at you;smile,and it smiles too.
世界犹如一面镜子:朝它皱眉它就朝你皱眉,朝它微笑它就朝你微笑。
阅读全文
0 0
- RabbitMQ入门-10-3(整合spring-发送异步消息注解实现)
- RabbitMQ入门-10(整合spring-发送异步消息)
- RabbitMQ学习之spring整合发送异步消息(注解实现)
- RabbitMQ入门-10-2(整合spring-发送同步消息注解实现)
- RabbitMQ学习(十二)之spring整合发送异步消息(注解实现)
- RabbitMQ入门-10-1(整合spring-发送同步消息)
- RabbitMQ学习之spring整合发送同步消息(注解实现)
- RabbitMQ学习(十)之spring整合发送同步消息(注解实现)
- RabbitMQ学习之spring整合发送异步消息
- RabbitMQ学习(十一)之spring整合发送异步消息
- RabbitMQ学习之基于spring-rabbitmq的消息异步发送
- rabbitmq学习10:使用spring-ampq发送消息及异步接受消息
- rabbitmq学习10:使用spring-amqp发送消息及异步接收消息
- RabbitMQ学习之spring整合发送同步消息
- RabbitMQ学习(九)之spring整合发送同步消息
- rabbitMq入门,整合spring
- spring整合消息队列rabbitmq
- spring整合消息队列rabbitmq
- struts2-9为应用指定多个配置文件
- 蓝桥杯 ADV-188 算法提高 排列数(java) 深度优先搜索 DFS
- Redundant_Connection
- csdn的markdown使用html语法——字体、字号与颜色
- RxJava2笔记(4)—操作符.map()
- RabbitMQ入门-10-3(整合spring-发送异步消息注解实现)
- NIO初识
- postgresql中获取两个时间类型小时差值
- Android 切换主题demo
- nfs挂载后umount不掉+不要小看umount -l
- 【深思考人工智能】目标检测算法精彩集锦,从图像到视频+从传统到深度
- Java中hashCode的作用(三文读懂hashcode)
- SQL SERVER 性能优化
- d