[英]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.