4RabbitMQ使用 · SpringCloud微服务实战 · 看云
导航
本节代码地址
浏览器打开RabbitMQ 客户端,可以自己先熟悉熟悉使用
尝试建一个fwcloud用户
点击fwcloud用户设置权限
下面通过一个SpringBoot 整合RabbitMQ 的例子熟悉一下RabbitMQ的功能
1. 新建项目
用于测试Rabbit 的基本功能
1.1 maven配置
需要引入spring-boot-starter-amqp的包,封装了RabbitMQ 的API。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
</dependencies>
1.2 新建启动类
@SpringBootApplication
public class FwRabbitMqApplication {
public static void main(String[] args) {
SpringApplication.run(FwRabbitMqApplication.class, args);
}
}
1.3 新建RabbitMQ配置
使用MQ前,我们需要设置一个Topic ,还可以配置交换器、路由等信息,我们这里以简单使用为主。
@Configuration
public class RabbitMqConfig {
@Bean
public Queue helloQueue(){
return new Queue("hello");
}
}
1.4 应用配置信息
设置RabbitMQ 连接配置信息,这里设置的用户是我们刚刚创建的fwcloud用户
server:
port: 8781
spring:
application:
name: fw-cloud-mq-rabbitmq
rabbitmq:
host: localhost
port: 5672
username: fwcloud
password: fwcloud
1.5 创建消息生产者
通过注入AmqpTemplate 来发送我们自定义产生的消息,AmqpTemplate 已经为我们定义了一套AMQP协议的基本操作。我们也将信息通过log日志打印出来
@Component
@Slf4j
public class FwSender {
@Autowired
private AmqpTemplate amqpTemplate;
public void send(){
String message="Hello World:"+ DateUtil.now();
log.info("FwSender:"+message);
amqpTemplate.convertAndSend("hello",message);
}
}
1.6 创建消息消费者
通过定义@RabbitListener来监听topic为hello的消息,并且通过@RabbitHandler来指定消息的处理。
@Component
@RabbitListener(queues = "hello")
@Slf4j
public class FwReceiver {
@RabbitHandler
public void process(String msg){
log.info("FwReceiver:{}",msg);
}
}
1.7 启动项目
启动之后,程序创建了一个和127.0.0.1:5672的连接,用户名是fwcloud
2019-12-18 14:56:16 INFO main org.springframework.amqp.rabbit.connection.CachingConnectionFactory Attempting to connect to: [localhost:5672]
2019-12-18 14:56:16 INFO main org.springframework.amqp.rabbit.connection.CachingConnectionFactory Created new connection: rabbitConnectionFactory#7a583586:0/SimpleConnection@33f17289 [delegate=amqp://fwcloud@127.0.0.1:5672/, localPort= 51546]
通过RabbitMQ 的web 管理可以看到Connections和Channels连接信息
1.7.1. Connections
1.7.2. Channels
1.8. 单元测试 发送数据sender()
2019-12-18 14:49:37.501 INFO 28284 --- [ main] com.yisu.mq.rabbitmq.sender.FwSender : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.513 INFO 28284 --- [ main] com.yisu.mq.rabbitmq.sender.FwSender : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.514 INFO 28284 --- [ main] com.yisu.mq.rabbitmq.sender.FwSender : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.514 INFO 28284 --- [ main] com.yisu.mq.rabbitmq.sender.FwSender : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.515 INFO 28284 --- [ main] com.yisu.mq.rabbitmq.sender.FwSender : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.515 INFO 28284 --- [ main] com.yisu.mq.rabbitmq.sender.FwSender : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.515 INFO 28284 --- [ main] com.yisu.mq.rabbitmq.sender.FwSender : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.516 INFO 28284 --- [ main] com.yisu.mq.rabbitmq.sender.FwSender : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.516 INFO 28284 --- [ main] com.yisu.mq.rabbitmq.sender.FwSender : FwSender:Hello World:2019-12-18 14:49:37
2019-12-18 14:49:37.517 INFO 28284 --- [ main] com.yisu.mq.rabbitmq.sender.FwSender : FwSender:Hello World:2019-12-18 14:49:37
1.9. 队列已经存在
1.10. 接收端数据
2019-12-18 15:00:44 INFO org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:44 INFO org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:44 INFO org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:44 INFO org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:44 INFO org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:44 INFO org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:44 INFO org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:43 INFO org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:44 INFO org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
2019-12-18 15:00:44 INFO org.springframework.amqp.rabbit.RabbitListenerEndpointContainer#0-1 com.yisu.mq.rabbitmq.consumer.FwReceiver FwReceiver:Hello World:2019-12-18 15:00:43
上面只是演示了最简单的收发模式,RabbitMQ还有跟多特性(订阅模式、路由模式、RPC模式等),读者可以到官网查看:https://www.rabbitmq.com,也可以购买书籍阅读。





