簡體   English   中英

ActiveMQ和Java路由

[英]ActiveMQ and Java routes

我是ActiveMQ(版本5.9.1)和Apache Camel的新手。 我正在嘗試一些路線。 我用Java編寫了這些代碼,然后將其打包為.jar並部署在%ACTIVEMQ_HOME%/ lib中。 在我的自定義foo-activemq.xml中,我添加了一個帶有package child標簽的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.啟動了... 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> 

暫無
暫無

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

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