RabbitMQ骆驼消费者-使用单个消息
我有一个场景,我想“拉”RabbitMQ队列/主题的消息,并一次处理一个消息。 特别是当消费者启动时,队列中已经有消息。 我尝试了以下方法,但没有成功(这意味着,每个选项都会读取队列,直到队列为空或另一个线程关闭上下文) 1.第一次处理后立即停止路线RabbitMQ骆驼消费者-使用单个消息,rabbitmq,apache-camel,Rabbitmq,Apache Camel,我有一个场景,我想“拉”RabbitMQ队列/主题的消息,并一次处理一个消息。 特别是当消费者启动时,队列中已经有消息。 我尝试了以下方法,但没有成功(这意味着,每个选项都会读取队列,直到队列为空或另一个线程关闭上下文) 1.第一次处理后立即停止路线 final CamelContext context = new DefaultCamelContext(); try { context.addRoutes(new RouteBuilder() { @Override
final CamelContext context = new DefaultCamelContext();
try {
context.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
RouteDefinition route = from("rabbitmq:harley?queue=IN&declare=false&autoDelete=false&hostname=localhost&portNumber=5672");
route.process(new Processor() {
Thread stopThread;
@Override
public void process(final Exchange exchange) throws Exception {
String name = exchange.getIn().getHeader(Exchange.FILE_NAME_ONLY, String.class);
String body = exchange.getIn().getBody(String.class);
// Doo some stuff
routeComplete[0] = true;
if (stopThread == null) {
stopThread = new Thread() {
@Override
public void run() {
try {
((DefaultCamelContext)exchange.getContext()).stopRoute("RabbitRoute");
} catch (Exception e) {}
}
};
}
stopThread.start();
}
});
}
});
context.start();
while(!routeComplete[0].booleanValue())
Thread.sleep(100);
context.stop();
}
final CamelContext context = new DefaultCamelContext();
context.start();
Endpoint re = context.getEndpoint(srcRoute);
re.start();
try {
PollingConsumer consumer = re.createPollingConsumer();
consumer.start();
Exchange exchange = consumer.receive();
String bb = exchange.getIn().getBody(String.class);
consumer.stop();
} catch(Exception e){
String mm = e.getMessage();
}
谢谢。这不是组件的主要目的,因为它需要继续接收。但是我已经创建了一个票证来研究如何支持basicGet(单接收)。3.8版之后将推出一个新的基于spring的rabbitmq组件,因此它将在那里实现(首先):非常感谢Claus,我很欣赏这是一个边缘案例,但很高兴将来会有一个选项。