如何通知Jetty 9.02的“消耗的内容”。ContentListener?

浏览:55日期:2024-03-04
如何解决如何通知Jetty 9.02的“消耗的内容”。ContentListener??

这个问题的简短答案是在异步调用完成处理后调用 ()。本教程示例中概述了一种解决方法:

@L_404_0@

主要方面是在(所有)侦听器都完成并且处理完成之前,可能不会调用 ()。在上面的示例中,用于同步stop()调用。这在Jetty示例中并没有真正解释,例如:

新的Jetty 9 HTTP客户端Chapter 28. HTTP客户端-异步API类HttpClient

某些异步接口使用诸如“ 消费内容 ”之类的调用。但是,对于Jetty 9,stop()调用会进行清理。

我们的用例很简单。在侦听器的onComplete()方法中,将调用 ()方法,该方法将减少 ()的倒计时锁存器。在send()调用之后,我们有一个名为 ()的同步方法,该方法等待对setCompleted()的调用。

public boolean finish(){ boolean result = false; int retryCount = 0; try {if( !this.latch.await( 5, TimeUnit.SECONDS ) ){ Util.warn(LOG,'Timed-out -- msg #', String.format('%0,4d', this.msgid) );}this.httpClient.stop();result = this.httpClient.isstopped(); } catch (InterruptedException ex ) {log.warn('Interrupted -- msg #', String.format('%0,4d', this.msgid)' ); } catch (Exception ex) {log.error(LOG,'Stop-exception -- msg #', String.format('%0,4d', this.msgid) ); } if( !result ) {log.warn(' * HttpClient NOT stopped -- msg #', String.format('%0,4d', this.msgid) ); } return result;}

只要在我们的onComplete()方法的末尾调用setCompleted(),stop调用似乎就对调用感到满意。我不清楚您是否不确定onComplete的内部时间。否则,一切似乎都令人满意。我真的相信api文档应该包括用于此类操作的“清理代码 ”-数据通信,数据库等。希望本文能够为他人节省时间。

解决方法

我有一个Jetty HttpClient使用Jettyv9.0.2发送异步请求。我有一个成功缓冲响应的Response.ContentListener和一个在调用完成后调用的Response.CompeleteListener。

Jetty 9.2 JavaDocs有一个Request.AsyncContentListener,它具有一个参数来告诉Jetty内容已被消耗: callback- 消费内容时要调用的回调。

Jetty v9.0.2 Response api中没有此侦听器类型:

导入org.eclipse.jetty.client.api。 结果 ;

确实有两个问题:

Response.ContentListener是否需要通知Jetty客户端内容已被使用? 如果是这样:Jetty v9.0.2如何管理使用具有这两个Response.ContentListener和Response.CompeleteListener设置的Async调用,将需要进行哪种清理? 在Jetty v9.0.2中使用异步功能是否存在潜在的陷阱?

似乎工作正常;我需要确保我们没有资源泄漏或潜在的泄漏等。当然,我们需要程序干净整洁,以便可以24x7运行。 预先感谢 您的欢迎帮助。

注意:

Request.AsyncContentListener-稳定的码头文档(我相信码头9.2)
相关文章: