SpringCloud H版4 消息驱动与分布式请求链路跟踪(Spring Cloud Stream、Spring Cloud Sleuth)

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,配置文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9LmDMvkU-1606976974827)(E:/杂/坚果云/共享/我的坚果云/java后端/spring/图片/SpringCloudStream的17)]

在这里插入图片描述

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要解决的问题:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oZ1uq2XL-1606976974848)(E:/杂/坚果云/共享/我的坚果云/java后端/spring/图片/sleuth的1.png)]

而来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
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值