您的位置:首页 > 编程语言 > Java开发

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,实现消息队列。

什么是 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();

}

}

源代码


相关示例完整代码: springboot-action


(完)

如果觉得我的文章对你有帮助,请随意打赏。



版权声明:本文由 梁桂钊 发表于 梁桂钊的博客

转载声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证),非商业转载请注明作者及出处,商业转载请联系作者本人。

文章标题:Spring Boot 揭秘与实战(六) 消息队列篇 - RabbitMQ

文章链接:http://blog.720ui.com/2017/springboot_06_mq_rabbitmq/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: