本文介绍hazelcast中Reliable Topic的使用。
Reliable Topic的基础使用
首先放上示例代码
示例代码
代码整体结构与Topic类似,但是通过配置可以发现Reliable Topic是依赖于Ringbuffer存储的。
这样可以获取以下优势:
- 由于Ringbuffer默认有一个异步备份,所以事件不会丢失。
- 由于每个ITopic有自己的Ringbuffer,所以在生产者快,消费者慢的情况下也没问题。
- 由于普通的ITopic背后的事件系统是基于其他数据结构的,例如集合的监听器,可能会遇到隔离问题。在Reliable Topic上就完全没有这个问题了。
慢消费者的处理
Reliable Topic 提供了一种处理慢消费者的方式。为慢消费者保留所有事件是不明智的,因为你不知道慢消费者什么时候能够赶上。通过控制Ringbuffer的size,可以只保留有限的数据,并且可以通过配置参数TopicOverloadPolicy采取一定的抛弃策略。DISCARD_OLDEST 在设置了Ringbuffer的TTL后,覆盖最老的记录。在这种策略下,快的生产者将替掉慢的消费者。(由于消费者保留的id已经不存在于Ringbuffer里面了)
DISCARD_NEWEST 抛弃最新的数据。
BLOCK 如果Ringbuffer已满,等待旧数据过期。
ERROR 直接抛出TopicOverloadException异常。
Reliable Topic的配置项
配置项 | 含义 | 备注 |
---|---|---|
statistics-enabled | 启用统计 | 默认true |
message-listener | 定义消息监听者 | |
read-batch-size | 批读取数量 | 默认为10 |
topic-overload-policy | 主题过载处理策略 | DISCARD_OLDEST, DISCARD_NEWEST, BLOCK 和 ERROR ,默认值BLOCK |
通过以上内容,希望读者能够对Reliable Topic的使用有一定的了解。