Spring Boot 揭秘与实战(六) 消息队列篇 - RabbitMQ
2017-07-27 14:53
826 查看
文章目录
1. 什么是 RabitMQ
2. Spring Boot 整合 RabbitMQ
3. 实战演练4. 源代码
3.1. 一个简单的实战开始
3.1.1. Configuration
3.1.2. 消息生产者
3.1.3. 消息消费者
3.1.4. 运行
3.1.5. 单元测试
3.2. 路由的实战演练
3.2.1. Configuration
3.2.2. 消息生产者
3.2.3. 消息消费者
3.2.4. 运行
3.2.5. 单元测试
本文,讲解 Spring Boot 如何集成 RabbitMQ,实现消息队列。
关于 RabbitMQ 的使用,可以阅读之前的 RabbitMQ 实战教程。
【译】RabbitMQ 实战教程(一) Hello World!
【译】RabbitMQ 实战教程(二) 工作队列
【译】RabbitMQ 实战教程(三) 发布/订阅
【译】RabbitMQ 实战教程(四) 路由
【译】RabbitMQ 实战教程(五) 主题
首先,在 pom.xml 中增加 RabbitMQ 依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
第二步,在 src/main/resources/application.properties 中配置信息。
#rabbitmq
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
@Configuration
public class RabbitMQConfig {
public static final String QUEUE_NAME = "spring-boot-simple";
@Bean
public Queue queue() {
return new Queue(QUEUE_NAME);
}
}
@Service
public class Sender {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send() {
System.out.println("梁桂钊 发送消息...");
rabbitTemplate.convertAndSend(RabbitMQConfig.QUEUE_NAME, "你好, 梁桂钊!");
}
}
@Service
public class Receiver {
@Autowired
private AmqpTemplate rabbitTemplate;
@RabbitListener(queues = "spring-boot-simple")
public void receiveMessage(String message) {
System.out.println("Received <" + message + ">");
}
}
@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.lianggzone.springboot" })
public class RunMain {
public static void main(String[] args) {
SpringApplication.run(RunMain.class, args);
}
}
public class RabbitMQTest {
@Autowired
private Sender sender;
@Test
public void send() throws Exception {
sender.send();
}
}
@Configuration
public class RabbitMQConfig2 {
public static final String QUEUE_NAME = "spring-boot";
public static final String QUEUE_EXCHANGE_NAME = "spring-boot-exchange";
@Bean
public Queue queue() {
// 是否持久化
boolean durable = true;
// 仅创建者可以使用的私有队列,断开后自动删除
boolean exclusive = false;
// 当所有消费客户端连接断开后,是否自动删除队列
boolean autoDelete = false;
return new Queue(QUEUE_NAME, durable, exclusive, autoDelete);
}
@Bean
public TopicExchange exchange() {
// 是否持久化
boolean durable = true;
// 当所有消费客户端连接断开后,是否自动删除队列
boolean autoDelete = false;
return new TopicExchange(QUEUE_EXCHANGE_NAME, durable, autoDelete);
}
@Bean
public Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(QUEUE_NAME);
}
@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(QUEUE_NAME);
container.setMessageListener(listenerAdapter);
return container;
}
@Bean
MessageListenerAdapter listenerAdapter(Receiver receiver) {
return new MessageListenerAdapter(receiver, "receiveMessage");
}
}
@Service
public class Sender {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send() {
System.out.println("梁桂钊 发送消息...");
rabbitTemplate.convertAndSend(RabbitMQConfig2.QUEUE_NAME, "你好, 梁桂钊!");
}
}
@Service
public class Receiver {
public void receiveMessage(String message) {
System.out.println("Received <" + message + ">");
}
}
@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.lianggzone.springboot" })
public class RunMain {
public static void main(String[] args) {
SpringApplication.run(RunMain.class, args);
}
}
public class RabbitMQTest {
@Autowired
private Sender sender;
@Test
public void send() throws Exception {
sender.send();
}
}
(完)
如果觉得我的文章对你有帮助,请随意打赏。
版权声明:本文由 梁桂钊 发表于 梁桂钊的博客
转载声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证),非商业转载请注明作者及出处,商业转载请联系作者本人。
文章标题:Spring Boot 揭秘与实战(六) 消息队列篇 - RabbitMQ
文章链接:http://blog.720ui.com/2017/springboot_06_mq_rabbitmq/
1. 什么是 RabitMQ
2. Spring Boot 整合 RabbitMQ
3. 实战演练4. 源代码
3.1. 一个简单的实战开始
3.1.1. Configuration
3.1.2. 消息生产者
3.1.3. 消息消费者
3.1.4. 运行
3.1.5. 单元测试
3.2. 路由的实战演练
3.2.1. Configuration
3.2.2. 消息生产者
3.2.3. 消息消费者
3.2.4. 运行
3.2.5. 单元测试
本文,讲解 Spring Boot 如何集成 RabbitMQ,实现消息队列。
什么是 RabitMQ
RabbitMQ 是一个在 AMQP 基础上完整的,可复用的企业消息系统。关于 RabbitMQ 的使用,可以阅读之前的 RabbitMQ 实战教程。
【译】RabbitMQ 实战教程(一) Hello World!
【译】RabbitMQ 实战教程(二) 工作队列
【译】RabbitMQ 实战教程(三) 发布/订阅
【译】RabbitMQ 实战教程(四) 路由
【译】RabbitMQ 实战教程(五) 主题
Spring Boot 整合 RabbitMQ
Spring Boot 整合 RabbitMQ 是非常容易,只需要两个步骤。首先,在 pom.xml 中增加 RabbitMQ 依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
第二步,在 src/main/resources/application.properties 中配置信息。
#rabbitmq
spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
实战演练
一个简单的实战开始
我们来实现一个简单的发送、接收消息。Configuration
在 Spring Boot 中使用 @Bean 注册一个队列。@Configuration
public class RabbitMQConfig {
public static final String QUEUE_NAME = "spring-boot-simple";
@Bean
public Queue queue() {
return new Queue(QUEUE_NAME);
}
}
消息生产者
创建消息生产者 Sender。通过注入 AmqpTemplate 接口的实例来实现消息的发送。@Service
public class Sender {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send() {
System.out.println("梁桂钊 发送消息...");
rabbitTemplate.convertAndSend(RabbitMQConfig.QUEUE_NAME, "你好, 梁桂钊!");
}
}
消息消费者
创建消息消费者 Receiver。通过 @RabbitListener 注解定义对队列的监听。@Service
public class Receiver {
@Autowired
private AmqpTemplate rabbitTemplate;
@RabbitListener(queues = "spring-boot-simple")
public void receiveMessage(String message) {
System.out.println("Received <" + message + ">");
}
}
运行
@SpringBootApplication@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.lianggzone.springboot" })
public class RunMain {
public static void main(String[] args) {
SpringApplication.run(RunMain.class, args);
}
}
单元测试
创建单元测试用例public class RabbitMQTest {
@Autowired
private Sender sender;
@Test
public void send() throws Exception {
sender.send();
}
}
路由的实战演练
经过上面的实战案例,我们对 Spring Boot 整合 RabbitMQ 有了一定的了解。现在,我们再来看下 RabbitMQ 路由场景。Configuration
在 RabbitMQConfig 中,我们注册 队列,转发器,监听等。@Configuration
public class RabbitMQConfig2 {
public static final String QUEUE_NAME = "spring-boot";
public static final String QUEUE_EXCHANGE_NAME = "spring-boot-exchange";
@Bean
public Queue queue() {
// 是否持久化
boolean durable = true;
// 仅创建者可以使用的私有队列,断开后自动删除
boolean exclusive = false;
// 当所有消费客户端连接断开后,是否自动删除队列
boolean autoDelete = false;
return new Queue(QUEUE_NAME, durable, exclusive, autoDelete);
}
@Bean
public TopicExchange exchange() {
// 是否持久化
boolean durable = true;
// 当所有消费客户端连接断开后,是否自动删除队列
boolean autoDelete = false;
return new TopicExchange(QUEUE_EXCHANGE_NAME, durable, autoDelete);
}
@Bean
public Binding binding(Queue queue, TopicExchange exchange) {
return BindingBuilder.bind(queue).to(exchange).with(QUEUE_NAME);
}
@Bean
SimpleMessageListenerContainer container(ConnectionFactory connectionFactory,
MessageListenerAdapter listenerAdapter) {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(QUEUE_NAME);
container.setMessageListener(listenerAdapter);
return container;
}
@Bean
MessageListenerAdapter listenerAdapter(Receiver receiver) {
return new MessageListenerAdapter(receiver, "receiveMessage");
}
}
消息生产者
创建消息生产者 Sender。通过注入 AmqpTemplate 接口的实例来实现消息的发送。@Service
public class Sender {
@Autowired
private AmqpTemplate rabbitTemplate;
public void send() {
System.out.println("梁桂钊 发送消息...");
rabbitTemplate.convertAndSend(RabbitMQConfig2.QUEUE_NAME, "你好, 梁桂钊!");
}
}
消息消费者
创建消息消费者 Receiver。通过 @RabbitListener 注解定义对队列的监听。@Service
public class Receiver {
public void receiveMessage(String message) {
System.out.println("Received <" + message + ">");
}
}
运行
@SpringBootApplication@EnableAutoConfiguration
@ComponentScan(basePackages = { "com.lianggzone.springboot" })
public class RunMain {
public static void main(String[] args) {
SpringApplication.run(RunMain.class, args);
}
}
单元测试
创建单元测试用例public class RabbitMQTest {
@Autowired
private Sender sender;
@Test
public void send() throws Exception {
sender.send();
}
}
源代码
(完)
如果觉得我的文章对你有帮助,请随意打赏。
版权声明:本文由 梁桂钊 发表于 梁桂钊的博客
转载声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证),非商业转载请注明作者及出处,商业转载请联系作者本人。
文章标题:Spring Boot 揭秘与实战(六) 消息队列篇 - RabbitMQ
文章链接:http://blog.720ui.com/2017/springboot_06_mq_rabbitmq/
相关文章推荐
- 消息队列1:RabbitMQ解析并基于Springboot实战
- 集群与负载均衡系列(5)——消息队列之spring-boot整合Rabbitmq
- SpringBoot的RabbitMQ消息队列: 六、第五模式"Topics"
- SpringBoot的RabbitMQ消息队列: 三、第二模式"Work queues"
- SpringBoot的RabbitMQ消息队列: 三、第二模式"Work queues"
- SpringBoot的RabbitMQ消息队列: 四、第三模式"Publish/Subscribe"
- SpringBoot中如何监听两个不同源的RabbitMQ消息队列
- SpringBoot中如何监听两个不同源的RabbitMQ消息队列
- SpringBoot的RabbitMQ消息队列: 六、第五模式"Topics"
- SpringBoot应用之消息队列rabbitmq
- SpringBoot的RabbitMQ消息队列: 四、第三模式"Publish/Subscribe"
- RabbitMQ 用SpringBoot处理消息队列
- SpringBoot的RabbitMQ消息队列: 一、消息发送接收第一印象
- RabbitMQ消息队列+spring监听mq服务器,接收消费mq消息
- [置顶] 【Excel_To_DB】SpringBoot+EasyPoi+Redis消息队列实现Excel批量异步导入数据库(三)
- Spring学习笔记3之消息队列(rabbitmq)发送邮件功能
- Spring Boot 揭秘与实战(二) 数据存储篇 - 数据访问与多数据源配置
- Spring Boot 揭秘与实战(二) 数据存储篇 - 声明式事务管理
- spring boot Rabbitmq集成,延时消息队列实现
- Spring Boot 揭秘与实战(五) 服务器篇 - 内嵌的服务器 Tomcat剖析