使用分布式事件 - 特性与策略
特性与策略 | 发产与消费 | 多通道示例 | 生态 / Solon Cloud Event [传送]
1、情况简介
使用分布式事件(或事件总线)可实现业务水平扩展、分布式事务效果(目前适配有:local, water, rabbitmq, rocketmq, mqtt, kafka,等)。
- 主要通过 CloudEventServicePlus 接口进行适配
- 使用 CloudClient.event() 获取适配实例
2、五个特性
- 可确认(ack)
支持是否成功消费的确认机制
- 可重试守护(retry)
消费失败后不断重发确保最终成功。此特性可支持SAGA分布式事务模型,实现最终一致性。事件消费时,注要幂等性控制。
- 可自动延时
消费失败后会自动延时(目前支持有: local, water, rabbitmq, rocketmq, rocketmq5, aliyun-ons)
- 可定时事件
比如,可设定10天后执行
- 可多插件共存(多通道模式)
支持多个插件同时存在,按业务做不同安排。例如:业务消息用 RabbitMQ,IoT消息用 Mqtt,日志用 kafka。
支持情况
适配框架 | 确认与重试守护 | 自动延时 | 定时(或延时) | 事务 |
---|---|---|---|---|
local | 支持 | 支持 | 支持 | / |
water | 支持 | 支持 | 支持 | / |
folkmq | 支持 | 支持 | 支持 | 支持 |
rabbitmq | 支持 | 支持 | 支持 | 支持 |
activemq | 支持 | 支持 | 支持 | 支持 |
rocketmq | 支持 | 半支持 | 半支持(最长2小时) | / |
rocketmq5 | 支持 | 支持 | 支持(有最长时限) | 支持 |
kafka | 支持 | / | / | 支持 |
mqtt | 支持 | / | / | / |
jedis | / | / | / | / |
3、认识注解 @CloudEvent
属性 | 说明 |
---|---|
topic | 主题 |
tag | 标签 |
level | 订阅级别(instance, cluster) |
group | 分组 |
channel | 通道 |
qos | 服务质量(0,最多交付一次;1,至少交付一次;2,只交付一次) |
- level: instance(实例级,以实例 ip:port 订阅),cluster(集群级,以 appName 订阅)
- channel:多通道时有效
- qos:mqtt 时有效
4、失败自动延时策略(不同框架会有不同)
失败次数 | 延时 |
---|---|
0 | 0s |
1 | 5s |
2 | 10s |
3 | 30s |
4 | 1m(即 1 分钟) |
5 | 2m |
6 | 5m |
7 | 10m |
8 | 30m |
9 | 1h(即 1 小时) |
n | 2h |
5、增强模式
详见: 《生态 / solon cloud / cloudevent-plus-solon-plugin》
6、多通道模式
详见: demo9039-event_multi_channel2