-1

我必须在 activemq 的消费者端集成骆驼。我已经设置了activemq并尝试在消费者语言上配置camel(使用java DSL),但它对我不起作用。这是代码:

public class TestConsumer {
    static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
    static String subject = "Test-AMQ";

    public static void main(String[] args) throws Exception {
        CamelContext context = new DefaultCamelContext();
        BrokerService broker = new BrokerService();
        //broker.addConnector(url);
        //broker.setBrokerName("localhost");
        broker.start();

        ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?create=false&waitForStart=10000");
        context.addComponent("jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
        context.addRoutes(new Routes());
        context.start();
    }
}

class Routes extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        from("jms:"+new TestConsumer().subject).process(new Processor() {
            @Override
            public void process(Exchange arg0) throws Exception {
                System.out.println("Camel Test Message: " + arg0.toString());
            }
        });
    }
}
4

1 回答 1

4

一个与您类似的示例。

import org.apache.activemq.ActiveMQConnection;
//import org.apache.activemq.broker.BrokerService;
import org.apache.activemq.camel.component.ActiveMQComponent;
import org.apache.camel.CamelContext;
import org.apache.camel.Exchange;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.DefaultCamelContext;

public class TestConsumer {
  static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
  static String subject = "Test-AMQ";

public static void main(String[] args) throws Exception {
    CamelContext context = new DefaultCamelContext();
  //  BrokerService broker = new BrokerService();

  //  broker.start();

    ActiveMQComponent comp = ActiveMQComponent.activeMQComponent("vm://localhost?broker.persistent=false");
    context.addComponent("jms",comp); 
    context.addRoutes(new Routes());
    context.start();        
}
}

class Routes extends RouteBuilder {
@Override
public void configure() throws Exception {
    from("jms:"+TestConsumer.subject).process(new Processor() {
        @Override
        public void process(Exchange arg0) throws Exception {
            System.out.println("Camel Test Message: " + arg0.toString());
        }
    });

    from("timer://foo?fixedRate=true&period=2000").setBody(simple("Hello, World")).to("jms:"+TestConsumer.subject);
}
}

不过,不确定您希望设置最终如何工作。使用虚拟机传输实际上不需要您启动专用代理,而是使用虚拟机实例。我只是放置了一个计时器路由来触发一些示例消息到该 ActiveMQ 队列,这些消息将被消耗。

于 2012-09-02T07:52:13.750 回答