亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Apache Camel Route:嘗試從服務器獲取數據時“無法分配請求的地址”

Apache Camel Route:嘗試從服務器獲取數據時“無法分配請求的地址”

BIG陽 2023-10-13 15:11:23
我想從一個非常簡單的網絡服務器獲取數據,該服務器在瀏覽器中調用時向我顯示一個頁面,并為我提供一些數據。該頁面幾秒鐘后自動更新并顯示:analog input 0 is 1023analog input 1 is 109analog input 2 is 0analog input 3 is 415analog input 4 is 0analog input 5 is 40在最終的程序中,我想從頁面獲取數據并通過 apache Camel 將其轉換為流入時間序列。到目前為止,我了解到碼頭組件是可行的方法,并將我的路線配置如下:public class HttpReaderRoute extends RouteBuilder {    @Autowired    private FrameworkConfig frameworkConfig;    @Override    public void configure() throws Exception {        String sourceString = "jetty:http://server.i.want.to.poll:8080/?sessionSupport=true";        String targetString = "stream:out";        // String targetString = "influxdb://influxDb?databaseName=" //        // + frameworkConfig.getInfluxDb().getDatabaseName() //        // + "&retentionPolicy=" //        // + frameworkConfig.getInfluxDb().getRetentionPolicy();        System.out.println(sourceString);        from(sourceString)                .log("Received data server") //                .to(targetString);    }}但是,我得到一個org.apache.camel.RuntimeCamelException: java.net.BindException: Cannot assign requested address或 - 如果我跳過使用格式jetty:http:server.i.want.to.poll:8080,我會得到“權限被拒絕”。相關配置類如下:@Configurationpublic class HttpClientConfig {    @Bean    public PoolingHttpClientConnectionManager poolingConnectionManager() {        PoolingHttpClientConnectionManager poolingConnectionManager = new PoolingHttpClientConnectionManager();            poolingConnectionManager.setMaxTotal(10);            return poolingConnectionManager;    }}也許值得一提的是我正在使用 spring.boot。我究竟做錯了什么?
查看完整描述

1 回答

?
MMTTMM

TA貢獻1869條經驗 獲得超4個贊

您是否正在嘗試使用 Apache Camel 從某些現有 Web 服務輪詢數據?如果是,您應該使用HTTP4 組件而不是Jetty 組件。

這是讓您盡快進入下一步的快速答案。你可以做類似的事情

from("timer:hello?period=2000").routeId("test_route")
.to("http4://example.com/")
.log("${body}")
.to("file:target/messages");

添加依賴后

?<dependency>
??<groupId>org.apache.camel</groupId>
??<artifactId>camel-http4</artifactId>
??<version>X.X.X</version>
?</dependency>

我們需要在這里進一步挖掘,因為人們遇到同樣問題的可能性很高,因為CAMEL-13220已于 2019 年 6 月刪除了Producer對 jetty 組件的支持。這意味著 Jetty 無法再執行 HTTP 客戶端功能。

  • 代碼示例中的路由以 開頭from("jetty:http://server.i.want.to.poll:8080/?sessionSupport=true")。該代碼實際上設置了一個 HTTP 服務器(或 Camel 術語中的消費者,如舊文檔中所示)。很可能,在 OP 的測試基礎設施中:

  • server.i.want.to.polllocalhost

  • 還有一些其他服務正在偵聽 8080,可能是該服務 OP 正在嘗試連接。這可能就是導致java.net.BindException

  • 過去,Jetty 組件可以用作生產者和消費者。如果 OP 使用 2.x 版本的 Camel,仍然可以使用 Jetty 組件作為 HTTP 客戶端(生產者),其路由類似于from("direct:start").to("jetty://http://www.google.com").?但是,我建議堅持使用 HTTP/HTTP4 組件(如果適用)。

PS:我的測試設置是一個 Spring boot 應用程序,正在運行Camel 3.0.0-M4


查看完整回答
反對 回復 2023-10-13
  • 1 回答
  • 0 關注
  • 105 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號