java - 实现生产者和批量消费者模型的最简单java方法
问题描述
我需要生产者一个一个地生产数据,消费者将批量消费数据(除非队列有足够的元素,否则将阻塞)。但是java BlockingQueue似乎只支持Consumer一个一个消费数据。
卡夫卡似乎是一个解决方案,还有其他更简单的解决方案吗?
解决方案
如果您需要纯 Java 解决方案,我最近开发了这个实用程序,如果队列元素未达到批处理大小,则使用刷新超时批处理 BlockingQueue 元素。它还支持使用多个实例来处理同一组数据的扇出模式(使用更多的 cpu-core)。
// Instantiate the registry
FQueueRegistry registry = new FQueueRegistry();
// Build FQueue consumer
registry.buildFQueue(String.class)
.batch()
.withChunkSize(5)
.withFlushTimeout(1)
.withFlushTimeUnit(TimeUnit.SECONDS)
.done()
.consume(() -> (broadcaster, elms) -> System.out.println("elms batched are: "+elms.size()));
// Push data into queue
for(int i = 0; i < 10; i++){
registry.sendBroadcast("Sample"+i);
}
更多信息在这里!
推荐阅读
- json - 查询 jsonb 列以匹配键数组
- google-api - 添加到 Gmail API 项目的范围不会反映在 OAuth 同意屏幕中
- react-native - react-native-deck-swiper 错误是 TypeError: undefined is not an object (evalating 'cards.length')
- python - 如果我要求用户从现在开始输入活动日期,如何计算剩余天数
- java - 有没有一种方法可以调用父类构造函数,该构造函数从没有自己的构造函数的子类中获取参数?
- c++ - 如何在与主函数不同的源文件中定义我的类?
- python-3.x - python3.x:从父目录导入文件时出现 ModuleNotFoundError
- angular - 无法过滤国家、州、城市下拉列表的 json 数据
- php - 预期响应代码 220,但得到代码“”,带有消息“”尝试使用 SwiftMailer 和 localhost 发送电子邮件时
- swift - 尝试劫持根视图控制器时收到 SIGABRT 错误