8,消息驱动:
Spring Cloud Stream:
现在一个很项目可能分为三部分:
前端--->后端---->大数据
而后端开发使用消息中间件,可能会使用RabbitMq
而大数据开发,一般都是使用Kafka,
那么一个项目中有多个消息中间件,对于程序员,因为人员都不友好
而Spring Cloud Stream就类似jpa,屏蔽底层消息中间件的差异,程序员主要操作Spring Cloud Stream即可
不需要管底层是kafka还是rabbitMqq
标准MQ
生产者/消费者之间靠消息媒介传递信息内容:Message
消息必须走特定的通道:消息通道MessageChannel
消息通道里的消息如何被消费呢,谁负责收发处理:消息通道MessageChannel的子接口SubscribableChannel,由MessageHandler消息处理器订阅
什么是Spring Cloud Stream
Spring Cloud Stream是怎么屏蔽底层差异的?
绑定器:
Binder
INPUT对应于消费者 OUTPUT对应于生产者
Spring Cloud Streamd 通信模式:
Spring Cloud Stream的业务流程:
类似flume中的channel,source,sink 估计是借鉴(抄袭)的
source用于获取数据(要发送到mq的数据)
channel类似SpringCloudStream中的中间件,用于存放source接收到的数据,或者是存放binder拉取的数据
常用注解和api:
使用SpringCloudStream:
需要创建三个项目,一个生产者,两个消费者
1,创建生产者
1,pom
2,配置文件
3,主启动类
4,service和实现类
service定义发送消息
这里,就会调用send方法,将消息发送给channel,
然后channel将消费发送给binder,然后发送到rabbitmq中
5,controller
6,可以测试
启动rabbitmq
启动7001,8801
确定8801后,会在rabbitmq中创建一个Exchange,就是我们配置文件中配置的exchange
访问8801的/sendMessage
创建消费者:
1,pom文件
2,配置文件
这里排版一点问题
input就表示,当前服务是一个消费者,需要消费消息,下面就是指定消费哪个Exchange中的消息
3,主启动类
4,业务类(消费数据)
生产者发送消息时,使用send方法发送,send方法发送的是一个个Message,里面封装了数据
5,测试:
启动7001.8801.8802
此时使用生产者生产消息
可以看到,消费者已经接收到消息了
创建消费者2
创建8803,
与8802创建一模一样,就不写了
创建8803主要是为了演示重复消费等问题
…
…
…
重复消费问题:
此时启动7001.8801.8802.8803
此时生产者生产一条消息
但是此时查询消费者,发现8802,8803都消费到了同一条数据
1,自定义分组
修改8802,8803的配置文件
现在将8802,8803都分到了A组
然后去重启02,03
然后此时生产者生产两条消息
可以看到,每人只消费了一条消息,并且没有重复消费
持久化问题:
就是当服务挂了,怎么消费没有消费的数据??
这里,先将8802移除A组,
然后将02,03服务关闭
此时生产者开启,发送3条消息
此时重启02,03
可以看到,当02退出A组后,它就获取不到在它宕机的时间段内的数据
但是03重启后,直接获取到了宕机期间它没有消费的数据,并且消费了
总结:
也就是,当我们没有配置分组时,会出现消息漏消费的问题
而配置分组后,我们可以自动获取未消费的数据
9,链路追踪:
Spring Cloud Sleuth
sleuth要解决的问题:
而来sleuth就是用于追踪每个请求的整体链路
使用sleuth:
1,安装zipkin:
https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/
下载
运行jar包
java -jar xxxx.jar
然后就可以访问web界面, 默认zipkin监听的端口是9411
localhost:9411/zipkin/
一条链路完整图片:
精简版:
可以看到,类似链表的形式
Trace:类似于树结构的Span集合,表示一次调用链路,存在唯一标识。
span:表示调用链路来源,通俗的理解span就是一次请求信息。
2,使用sleuth:
不需要额外创建项目,使用之前的8001和order的80即可
1,修改8001
引入pom:
这个包虽然叫zipkin但是,里面包含了zpikin与sleuth
修改配置文件:
2,修改80
添加pom
与上面是一样的
添加配置:
与上面也是一样的
3,测试:
启动7001.8001,80,9411