Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 事件总线的大小(以vert.x为单位)_Java_Event Handling_Vert.x - Fatal编程技术网

Java 事件总线的大小(以vert.x为单位)

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 二,。

我正在使用vert.x读取文件并进行转换,然后推送到kafka。 我使用了2个Verticle,没有使用任何工作线程(我不想更改文件中日志的顺序)

每个文件包含大约120000行

然而,我观察到,过了一段时间,我不再从垂直1观察日志。 我怀疑事件总线已满,所以消费者仍在消费,但生产者线程正在等待事件总线变空

所以我的问题是 1.事件总线的默认大小是多少?在文件里写着

    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));