首页 > 解决方案 > 在 Apache Beam 中经过一定时间后终止进程

问题描述

对于 BigQuery 表中的每个新用户条目,我必须向该用户发送一封电子邮件。

我正在使用 Apache Beam 从 BQ 获取这些条目,对于每个条目,我正在向 RESTful Web 服务发送请求以发送电子邮件并等待响应。

问题是,当请求数量变得太大时,比如一百万,来自 Web 服务的响应来得很晚,Apache Beam 作业处于挂起状态。

有没有办法在一分钟后停止等待响应并继续处理 Apache Beam 中的其他请求?还是让 Web 服务在一分钟后发回超时响应会更好?

我认为后者是有道理的,但我只是想知道考虑到 Apache Beam 中并行运行的事情是否可以选择等待。

标签: restapache-beam

解决方案


您必须使用自定义超时参数覆盖 HttpClient 属性:

HttpParams.setConnectionTimeout(params, connectionTimeoutMillis);
HttpParams.setSoTimeout(params, socketTimeoutMillis);

第一个参数允许您指定建立初始连接的超时时间,第二个参数允许您指定套接字在没有数据发送时等待的最长时间。


推荐阅读