为了账号安全,请及时绑定邮箱和手机立即绑定

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 关注
  • 79 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信