课程名称:SpringCloud Finchley三版本微服务实战
课程章节:
第7章 消息和异步
主讲老师:廖师兄
课程内容:
SpringCloud rabbitMQ基本使用以及商品订单服务中异步使用扣库存
课程收获:
1、异步
客户端请求不会阻塞进程,服务端的响应可以是非即时的。
异步的常见形态:(1)、通知;(2)、请求/异步响应;(3)、借助消息
MQ应用场景:(1)、异步处理;(2)、流量削峰;(3)、日志处理;(4)、应用解耦。
2、rabbitMQ使用
(1)、引入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
(2)、配置MQ
spring:
rabbitmq:
host:localhost
port:5672
username:guest
password:gust
(3)、接收方定义
定义接收方:
在RabbitMq控制台创建队列,使用@RabbitListener(queues = "myQueue")监听队列
.使用注解@RabbitListener(queuesToDeclare = @Queue("myQueue"))创建并监听队列
(4)、发送
AmqpTemplate.convertAndSend
(5)、Exchange和Queue绑定
@RabbitListener(bindings = @QueueBinding(
value = @Queue("myQueue")
exchange = @Exchange("myExchange")
))
3、Spring Cloud Stream
Spring Cloud Stream也是Spring Cloud的组件之一,是为微服务构建消息驱动能力的框架,应用程序通过input、output来与Stream中的Binder来进行交互,Stream中的Binder则与中间件交互,Binder是一个抽象概念,是应用于消息中间件的联合剂。使用Stream最大的方便之处是对消息中间件的进一步封装,可以做到代码层面对中间件的无感知,甚至于动态的切换中间件,切换Topic。
局限:Stream当前支持的Binder只有两种,RabbitMQ和Kafka。
(1)、引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-stream-rabbit</artifactId>
</dependency>
(2)、分别定义@Input、@Output
(3)、接收端