簡體   English   中英

在Java中創建Camel端點以在xml路由中使用

[英]Create Camel endpoints in java to use in xml routes

我一直在嘗試在Java中創建端點,並在我的xml路由中引用了這些端點,但未成功。 我可以在xml中執行此操作:

<endpoint id="kafkatopic" uri="kafka:..."/>

並在路由中引用了端點:

<route id="eventflow">
    <from ref="kafkatopic" ...>

我想做的是使用Java替換xml端點聲明。 我已經嘗試過類似的東西:

Endpoint kafkaep = camelCtx.getEndpoint(kafkaUri); 

但是我很kafkatopic如何創建密鑰“ kafkatopic ”來引用端點,以便xml路由能夠找到它。 我已經檢查了EndpointRegistry但是不允許我為端點提供一個簡單的名稱。 任何幫助表示贊賞。 謝謝。

這是我的camelContext:

<camelContext xmlns="http://camel.apache.org/schema/blueprint"
    trace="true" id="context">

    <routeBuilder ref="myRouteBuilder" />
    <route id="eventflow">
        <from ref="kafkatopic" ...>

我簡化的RouteBuilder.configure()如下。 在這里,我試圖將端點放到endpointRegistry中,希望它將被xml路由使用。 EndpointRegistry上沒有很多文檔,因此我在黑暗中進行拍攝。

    // endpoint i have formatted to be "someKey=uri"
    String endPoint = getConfigs("camel-endpoint");
    String [] eptoks = ep.split("=", 2);
    EndpointRegistry<String> endpointRegistry = camelContext.getEndpointRegistry();
    Endpoint endpoint = camelContext.getEndpoint(eptoks[1]);
    endpointRegistry.put(eptoks[0], endpoint);

您可以嘗試在Spring中明確定義端點:

<bean id="kafkaComponent" class="org.apache.camel.component.kafka.KafkaComponent"/>
  <bean id="kafkaEndpoint" class="org.apache.camel.component.kafka.KafkaEndpoint">
    <constructor-arg value="kafka:..."/>
    <constructor-arg ref="kafkaComponent"/>
</bean>

或使用Spring工廠bean和方法: http : //www.javabeat.net/create-spring-beans-using-factory-methods/

實現此目的的最簡單方法是創建一個實現

org.apache.camel.Processor 

界面並在spring xml文件中進行配置,例如

<bean id="sp" class="com.mycompany.SimpleProcessor"/>

然后,在您的路線中,您可以簡單地使用您在Bean中提供的ID來引用它,例如

<to uri="sp" />

我想說,盡管您可能有充分的理由使閱讀起來有些混亂,但是當我查看路線時,我想清楚地知道端點詳細信息,除非在上面的某些地方引用了它們。 以后必須在Java類中查找端點可能很麻煩。

我最近發現,您可以用Java編寫整個RouteBuilder邏輯,並像其他任何bean一樣簡單地讓blueprint xml調用它? 這就是為什么您的路由在java中而啟動機制在xml中的原因。

我知道已經晚了,但是這是我所做的工作。 基本上,我基於配置以編程方式簡單地將端點創建為“直接”端點,並在我的駱駝路線xml文件中引用這些直接端點。 這樣,我避免在xml路由文件中包含特定於環境的值(例如主機名,端口號等),並且僅針對所有環境使用一個版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM