Apache Camel Route:“尝试从服务器获取数据时无法分配请求的地址”

问题描述 投票:0回答:1

我想从一个非常简单的Web服务器上获取数据,该Web服务器在浏览器中被调用时会显示一个页面,向我提供一些数据。该页面会在几秒钟内自动更新,并显示:

analog input 0 is 1023
analog input 1 is 109
analog input 2 is 0
analog input 3 is 415
analog input 4 is 0
analog input 5 is 40

在最终程序中,我想从页面获取数据,并通过apache骆驼将其转换为流入时间序列。到目前为止,我了解到码头是必经之路,并按照以下步骤配置了我的路线:

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的格式,则会得到“权限被拒绝”。

相关的配置类如下:

@Configuration
public class HttpClientConfig {

    @Bean
    public PoolingHttpClientConnectionManager poolingConnectionManager() {
        PoolingHttpClientConnectionManager poolingConnectionManager = new 

PoolingHttpClientConnectionManager();
            poolingConnectionManager.setMaxTotal(10);
            return poolingConnectionManager;
    }
}

也许值得一提的是我正在使用spring.boot。

我在做什么错?

java spring-boot apache-camel jetty
1个回答
2
投票

[您是否正在尝试从我们使用Apache Camel服务的现有数据中轮询数据?如果是,则应使用HTTP4 Component而不是Jetty componet

这是使您尽快进入下一步的快速答案。您可以执行类似的操作

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支持。这意味着码头不能再执行HTTP客户端功能。

  • 代码示例中的路径以from("jetty:http://server.i.want.to.poll:8080/?sessionSupport=true")开头。该代码实际上设置了一个HTTP Server(或使用Camel术语的Consumer,如here in old docs所示)。在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:我的测试设置是运行Camel 3.0.0-M4的Spring引导应用程序>

© www.soinside.com 2019 - 2024. All rights reserved.