ActiveMQ and Java routes



我是ActiveMQ(版本5.9.1)和Apache Camel的新手。我正在尝试几条路线。我用 Java 编写它们,然后打包在.jar中并部署在 %ACTIVEMQ_HOME%/lib 上。在我的自定义 foo-activemq 中.xml我添加了一个带有包子标签的 camelContext 标签。这是我的相关.xml

...
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
  <package>edu.foo.amq.camel</package>
</camelContext>
...

这是我的两条路线:

package edu.foo.amq.camel;
import org.apache.camel.builder.RouteBuilder;
public class NumberRoute extends RouteBuilder {
    @Override
    public void configure() throws Exception {
    from("jms:queue:number.queue")
      .marshal("UTF-8")
      .choice()
      .when(header("readyToGo").isNotEqualTo(true))
        .to("jms:queue:big.number.queue");
    }
}

package edu.foo.amq.camel;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
public class BigNumberRoute extends RouteBuilder {
@Override
public void configure() throws Exception {
    from("jms:queue:big.number.queue")
    .marshal("UTF-8")
    .split(body().tokenize("n")).streaming()
    .process(new Processor() {
        @Override
        public void process(Exchange arg0) throws Exception {
            arg0.getIn().setHeader("readyToGo", true);
            System.out.println(arg0.getIn().getBody(
                    String.class));
            }
        })
        .to("jms:queue:number.queue");
    }
}

当我启动我的ActiveMQ代理时,我可以看到... Total 0 routes, of wich 0 is started.。如果我查看 ActiveMQ Web 控制台,我可以查看队列number.queuebig.number.queue启动并运行,但我的 Java 路由没有。我错过了什么?

更新:我从我的 foo-activemq.xml 配置文件中删除了 camelContext 标签,并添加了导入标签:

...
<import resource="jetty.xml"/>
<import resource="foo-camel.xml"/>
...

这是我的foo-camle.xml配置文件,我主要使用%ACTIVEMQ_HOME%/examples/conf/camel.xml文件。我把这个文件放到 %ACTIVEMQ_HOME%/conf 中:

<beans xmlns="http://www.springframework.org/schema/beans"  
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://camel.apache.org/schema/spring
    http://camel.apache.org/schema/spring/camel-spring.xsd 
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd">
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
    <package>edu.foo.amq.camel</package>
</camelContext>
<bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent" >
    <property name="connectionFactory">
      <bean class="org.apache.activemq.ActiveMQConnectionFactory">
        <property name="brokerURL" value="vm://amq-broker?create=false"/>
        <property name="userName" value="${activemq.username}"/>
        <property name="password" value="${activemq.password}"/>
      </bean>
    </property>
</bean>

但结果是一样的:ActiveMQ说没有路由

必须将 Camel 配置 XML 文件添加到activemq.xml配置文件中:

<import resource="foo-activemq.xml" />

编辑:

还有什么?

  • foo-activemq.xml重命名为默认activemq.xml
  • 再次验证您的jar是否真的在lib目录中(我相信您已经这样做了)
  • 添加一个简单的测试路由到foo-camel-xml并检查日志文件是否加载了此路由,例如

    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring" >
        <package>edu.foo.amq.camel</package>
        <route>
            <from uri="direct:start" />
            <log message="${body}" />
        </route>
    </camelContext>
    

最新更新