【问题标题】:How to set proxy while using camel-http使用camel-http时如何设置代理
【发布时间】:2013-07-10 01:35:49
【问题描述】:

我是骆驼的新手,最终陷入了代理问题。 我有这样一条路线,用于存储从经常性 http 调用到文件的结果:

from("quartz://collector/test?cron=0+0/2+*+?+*+*")                      
    .setHeader(Exchange.HTTP_METHOD, constant("GET"))    
    .setHeader(Exchange.HTTP_QUERY, constant("Id=50")
.to("http://www.anywebsite/question.php")
    .setHeader(Exchange.FILE_NAME,constant("${date:now:yyyyMMddHHmmssSSS}.xml"))
.inOnly(someFolder);

我的问题是我需要指定一个代理(主机 + 端口)才能通过,否则我将无法获取信息。 我尝试了各种方法,包括从 routeBuilder(通过 getContext().setProperties)和包装在“properties/property”标签中的 bundle-context.xml 设置“http.proxyHost”和“http.proxyPort”。 我还尝试通过将&proxyHost=myHost&proxyPort=myPort 添加到端点(camel-http 文档说您可以将其设置为 httpenpoint)来设置它。

没有成功..

我还尝试从我通过谷歌阅读的帖子中设置一个 http-conduit,例如(根据部署目标选择一个或另一个):

<http-conf:conduit name="*.http-conduit">
<!-- when behind proxy -->
        <http-conf:client Connection="close" ConnectionTimeout="3000" ReceiveTimeout="10000" ProxyServer="p-goodwat" ProxyServerPort="3128"/> 
<!-- when no proxy -->
    <http-conf:client Connection="close" ConnectionTimeout="3000" ReceiveTimeout="10000" />
</http-conf:conduit>

但这也不起作用......而且,我希望能够自动完成,而无需根据安装位置更新骆驼上下文。

那么,你有没有找到一种设置它的方法,并动态设置它?

【问题讨论】:

    标签: http proxy apache-camel fuseesb


    【解决方案1】:

    经过几次尝试,我设法让它工作......看起来问题不是来自我的解决方案,而是因为我没有增加捆绑版本......因此,我的解决方案没有被采用考虑。

    因此,对我有用的解决方案是从我的 routeBuilder 设置上下文的端点,例如: getContext().setProperty("http.proxyHost",10.100.100.1);
    getContext().setProperty("http.proxyPort",2111);

    现在,它确实有效。

    感谢观看的人!

    【讨论】:

    • 谢谢马文,你的回答让我朝着正确的方向前进,尽管它现在已经过时了 ;-) 我在下面为更新的骆驼版本提供了答案。
    【解决方案2】:

    我认为这次 http-conduit 设置不适合你,因为你没有使用任何 CXF 客户端来调用服务。

    【讨论】:

    • 我猜到了:我在很多例子中都读到过这个,而且总是有一个 CXF 客户端。感谢您的确认!
    【解决方案3】:

    使用 XML 配置:

    <camelContext id="context" xmlns="http://camel.apache.org/schema/spring">
        <properties>
            <property key="http.proxyHost" value="127.0.0.1"/>
            <property key="http.proxyPort" value="8888"/>
       </properties>
    </camelContext>
    

    【讨论】:

      【解决方案4】:

      虽然马文回答了他自己的问题,但他的回答已经过时了。

      至少对于较新的 Camel 版本,解决方案更改为:

       context.getGlobalOptions().put("http.proxyHost", "172.168.18.9");
       context.getGlobalOptions().put("http.proxyPort", "8080");
      

      您可以在扩展 RouteBuilder 时使用 getContext() 来获取上下文。

      来源:https://camel.apache.org/components/3.15.x/http-component.html#_configuring_a_proxy 上的 Camel 文档

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-15
        • 2022-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多