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

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


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


相关配置类如下:


@Configuration

public class HttpClientConfig {


    @Bean

    public PoolingHttpClientConnectionManager poolingConnectionManager() {

        PoolingHttpClientConnectionManager poolingConnectionManager = new 


PoolingHttpClientConnectionManager();

            poolingConnectionManager.setMaxTotal(10);

            return poolingConnectionManager;

    }

}

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


我究竟做错了什么?


BIG阳
浏览 80回答 1
1回答

MMTTMM

您是否正在尝试使用 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.poll是localhost还有一些其他服务正在侦听 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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java