Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中创建用于xml路由的驼峰端点_Java_Xml_Apache Camel - Fatal编程技术网

在java中创建用于xml路由的驼峰端点

在java中创建用于xml路由的驼峰端点,java,xml,apache-camel,Java,Xml,Apache Camel,我一直在尝试用java创建端点,并在xml路由中引用这些端点,但没有成功。我可以用xml实现这一点: <endpoint id="kafkatopic" uri="kafka:..."/> 然而,如何创建一个键“kafkatopic”来引用端点,以便xml路由能够找到它,这让我感到困惑。我已经检查了EndpointRegistry,但不允许为端点提供简单的名称。 感谢您的帮助。谢谢 以下是我的背景: <camelContext xmlns="http://camel.apac

我一直在尝试用java创建端点,并在xml路由中引用这些端点,但没有成功。我可以用xml实现这一点:

<endpoint id="kafkatopic" uri="kafka:..."/>
然而,如何创建一个键“
kafkatopic
”来引用端点,以便xml路由能够找到它,这让我感到困惑。我已经检查了
EndpointRegistry
,但不允许为端点提供简单的名称。 感谢您的帮助。谢谢

以下是我的背景:

<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);
//端点我已格式化为“someKey=uri”
字符串端点=getConfigs(“骆驼端点”);
字符串[]eptoks=ep.split(“=”,2);
EndpointRegistry EndpointRegistry=camelContext.getEndpointRegistry();
Endpoint=camelContext.getEndpoint(eptoks[1]);
endpointRegistry.put(eptoks[0],endpoint);

实现这一点的最简单方法是创建一个实现

org.apache.camel.Processor 
接口并在SpringXML文件中对此进行配置,例如

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

在您的路径中,您可以简单地使用您在bean中提供的id来引用它,例如

<to uri="sp" />

我想说的是,这让阅读起来有点混乱,尽管你可能有一个很好的理由,但当我查看路线时,我想清楚地知道端点的详细信息,除非它们在上面的某个地方被引用。以后必须在java类中查找端点可能会很麻烦


我最近发现,您可以用java编写整个RouteBuilder逻辑,只需让blueprint xml像调用其他bean一样调用它?这就是为什么路由使用java,启动机制使用xml。

您可以尝试在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 factory bean和方法:

我知道已经很晚了,但以下是我所做的工作。基本上,我根据配置以编程方式将端点创建为“直接”端点,并在xml文件中引用这些直接端点。这样,我就避免了在xml路由文件中使用特定于环境的值,如主机名、端口号等,而只为所有环境使用一个版本。

,请提供有关此问题的所有代码。我需要一个端点,我希望根据配置以编程方式创建一对多端点,并在我的路由中使用这些创建的端点。您可以创建自己的组件来创建端点并使用该组件,我使用驼峰原型组件maven archtype,它创建了一个可以自定义的基本组件-有关使用它的更多信息,请参阅。我打算创建的端点实际上是“EdgePoint”,而不是中间端点,即它们是与外部系统的连接,根据环境和应用程序的不同而有所不同,因此,我需要从配置中创建它们。实际上,我正在使用routebuilder创建端点,并将路由文件(blueprint.xml之外)加载到camelcontext中,但这将迫使我通过在spring/blueprint xml中声明来静态创建端点。我需要一种根据配置创建任何数字的方法。
<to uri="sp" />
<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>