2KB项目,专业的源码交易网站 帮助 收藏 每日签到

使用 CometD、Apache 和 Camel 的 502 代理错误

  • 时间:2019-01-23 18:40 编辑:2KB 来源:2KB.COM 阅读:330
  • 扫一扫,手机访问
  • 分享
摘要:
CometD Apache Apache Camel 英文原文:502 Proxy Error Using CometD, Apache and Camel 近来,我们在对Apache进行测试的过程中碰到了一个问题:给通过CometD进行连接的客户返回了“502代理错误”(把Apache做为代理服务器部署在Camel/Jetty CometD服务器前面)。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>502 Proxy Error</title>
</head><body>
<h1>Proxy Error</h1>
<p>The proxy server received an invalid
response from an upstream server.
 
The proxy server could not handle the request <em><a href="/cometdServer/connect">POST&nbsp;/cometdServer/connect</a></em>.<p>
Reason: <strong>Error reading from remote server</strong></p></p>
</body></html>

我们的设置

我们使用CometD,Camel(位于ActiveMQ上)和Apache组合把消息从服务器广播给已订阅消息的浏览器客户端。
  • CometD是一个可扩展的基于HTTP协议的事件路由总线,它使用了众所周知的Ajax推送技术模型Comet。
  • Comet是一个使用长时间保持HTTP请求的互联网应用模型,它允许互联网服务器在浏览器没有专门请求数据的情况下“推送”数据给浏览器。
  • 我们把Camel部署在ActiveMQ服务器上。我们在Camel上设置了用于处理进入的JMS消息的路由。这些消息一旦得到了处理,接着就把处理得到的输出(以JSON消息的形式)发送给Camel路由定义的CometD端点,例如:
    cometd://0.0.0.0:9099/mybroadcastchannel 
  • 这个端点使用Camel的CometD模块在端口9099上运行处理CometD端点的Jetty实例。
  • 浏览器客户端通过Apache服务器连接这个端点。我们把Apache的mod_proxy模块做为连接CometD端点的代理才做到这些的,例如在proxy.conf里:
    ProxyPass /cometdServer http://camelserver:9099/cometd
    ProxyPassReverse /cometdServer http://camelserver:9099/cometd
  • 这允许我们很容易地“推送”消息给已订阅消息的浏览器客户端,用于把Camel消息路由内部的处理结果通知给浏览器客户端(通常,你是使用java桌面/swing类型解决方案里的JMS主题实现这个东西的)。

Apache和CometD长轮询存在的问题

通常,在CometD 长轮询/Bayeux服务器前面部署Apache为代理服务器就不是一个好主意。这是由于Apache是“一个请求对应一个线程"模型-这在扩展这种方案的时候带来了很多问题。

更详细的说明在这儿:

http://cometd.org/node/81

(假若使用默认配置,)那么在Jetty/Camel服务器超时之前,Apache代理服务器就产生了超时问题。默认情况下,Apache的超时设置为2分钟(在httpd.conf的全局定义里),而Camel/CometD这边,默认的超时设置为4分钟(240000毫秒)

http://cometd.org/node/81

在某中条件下-如果CometD终端节点保持连接超过了2分钟,这将引起Apache代理服务器超时,然后代理服务器断开客户端的CometD连接(它能保持连接打开的时间长度似乎是可变的,不过通常都比这个时间短很多)

方案1

增加Apache代理服务器的超时时间到超过4分钟。或者全局的,或者针对每个重定向配置(在proxy.conf中)

ProxyPass /cometdServer http://camelserver:9099/cometd timeout=250
ProxyPassReverse /cometdServer http://camelserver:9099/cometd timeout=250

方案2

减少 Camel服务器的超时时间到小于2分钟,例如
cometd://0.0.0.0:9099/mybroadcastchannel?timeout=110000

有用的 Debugging工具

我发现这些工具对于探究到底发生了什么(以及挖掘出 CometD 消息的细节)具有无限的价值。

Chrome 开发者工具

对于监测浏览器与服务器之间的网络流量非常有用——使你能很容易的看到每个HTTP交互的细节(在‘Network’ 标签)。这里的特别用法是看到时间——你可以看到请求失败是发生在2分钟的时间点。


Apache 服务器-状态模块

启用apache 的mod_status 对于确认问题与线程无关非常有用(正如上文关于Apache/CometD的著名争论所提到的)

这使你能看到当前的工作线程正在Apache上做着什么。如何启用做到这一点的说明在这里:

http://httpd.apache.org/docs/2.2/mod/mod_status.html 本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部