springCloud→Stream: 消息分组

消息分组有2个好处,分别是集群合理消费数据持久化

集群消费下的分组

1)分组的意义

分组在项目中是有非常重大的意义,通常应用于消息并发高、消息堆积的场景,这些场景服务消费方通常会做集群操作,一旦做集群操作,我们又需要项目中的消费者合理消费,比如用户打车支付完成后,我们需要增加用户积分同时修改订单状态,如果集群环境中有2台服务器都执行该消费操作,此时用户积分会增加两次,就会造成非幂等问题。
请添加图片描述
此时集群中相同服务应该属于同一个组,同一个组中只允许有一个主节点消费某一个信息,这样就可以避免非幂等问题的出现。

2)分组实战

项目结构图:
在这里插入图片描述

我们将两个order服务都运行起来。此时运行起来,1808218182节点会同时消费所有数据。

修改hailtaxi-orderhailtaxi-order1的核心配置文件application.yml,添加分组:
在这里插入图片描述

3)测试

启动pay,order,order1三个服务,调用pay的支付方法。会给mq中发送一条消息。
在这里插入图片描述
我们来访问http://localhost:18083/pay/wxpay/1

我们发现只会有一个order节点去消费数据

数据持久化

我们把分组去掉,停掉hailtaxi-order服务,然后请求http://localhost:18083/pay/wxpay/1发送数据,发送完数据后,再启动hailtaxi-order服务,此时发现没有数据可以消费,这是因为数据没有持久化,是一种广播模式。

如果需要数据持久化,得给每个消费节点添加group组即可。这样的话,就算发送方发送消息时候接收方不在线,再等接收方上线的时候接收方依旧能接受到消息

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值