使用分布式事件 - 特性与策略
特性与策略 | 发产与消费 | 多通道示例 | 生态 / 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