我必须在activemq的消费者端集成camel。我已经设置了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());
}
});
}
}
答案 0 :(得分: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);
}
}
不知道您希望设置最终如何工作。 实际上,使用VM传输不需要启动专用代理,而是使用VM实例。我只是将一个定时器路由引发到一些样本消息到该ActiveMQ队列,这将被消耗。