Java 事件总线的大小(以vert.x为单位)
我正在使用vert.x读取文件并进行转换,然后推送到kafka。 我使用了2个Verticle,没有使用任何工作线程(我不想更改文件中日志的顺序) 每个文件包含大约120000行 然而,我观察到,过了一段时间,我不再从垂直1观察日志。 我怀疑事件总线已满,所以消费者仍在消费,但生产者线程正在等待事件总线变空 所以我的问题是 1.事件总线的默认大小是多少?在文件里写着Java 事件总线的大小(以vert.x为单位),java,event-handling,vert.x,Java,Event Handling,Vert.x,我正在使用vert.x读取文件并进行转换,然后推送到kafka。 我使用了2个Verticle,没有使用任何工作线程(我不想更改文件中日志的顺序) 每个文件包含大约120000行 然而,我观察到,过了一段时间,我不再从垂直1观察日志。 我怀疑事件总线已满,所以消费者仍在消费,但生产者线程正在等待事件总线变空 所以我的问题是 1.事件总线的默认大小是多少?在文件里写着 DEFAULT_ACCEPT_BACKLOG The default accept backlog = 1024 二,。
DEFAULT_ACCEPT_BACKLOG
The default accept backlog = 1024
二,。如何确认我对发布者线程被阻塞的怀疑?我不确定accept backlog设置是否对eventbus有任何影响,因为文档可能与netserver有关,但通过对代码的简短扫描,我没有发现eventbus中有任何用途 然而,事件总线确实会立即传递消息,消息不会在某个地方排队(至少我从代码中了解到了这一点)。因此,关于第一个问题,它没有任何大小,至少在本地运行时没有(不知道集群版本,但我假设这不适用于您的情况) 要确认(eventloop)线程实际上被阻塞是很容易的,您的日志中应该有大量异常,表明事件循环被阻塞
我猜你的问题出在其他地方,但如果没有任何代码或有意义的日志,这实际上很难判断。VertX在内部使用Netty的
SingleThreadEventLoop
作为其事件总线,可能有20亿条消息
您可能必须尝试
VertxOptions。setWarningExceptionTime(long warningExceptionTime)
将该值设置为低于默认值(5秒),以查看是否存在任何关于阻塞线程的警告。要补充@iwat-answer,在我使用的版本中,似乎从系统属性读取了最大大小:
protected static final int DEFAULT_MAX_PENDING_TASKS = Math.max(16, SystemPropertyUtil.getInt("io.netty.eventLoop.maxPendingTasks", 2147483647));
因此,您可以通过设置该系统属性来控制垂直通道前面队列的大小
如果事件总线已满(NioEventLoop中的队列达到最大大小),任务将被拒绝。因此,如果点击该按钮,您应该开始看到对消息的错误响应,而不应该看到任何被阻止的生产者
protected static final int DEFAULT_MAX_PENDING_TASKS = Math.max(16, SystemPropertyUtil.getInt("io.netty.eventLoop.maxPendingTasks", 2147483647));