001 /**
002 *
003 * Licensed to the Apache Software Foundation (ASF) under one or more
004 * contributor license agreements. See the NOTICE file distributed with
005 * this work for additional information regarding copyright ownership.
006 * The ASF licenses this file to You under the Apache License, Version 2.0
007 * (the "License"); you may not use this file except in compliance with
008 * the License. You may obtain a copy of the License at
009 *
010 * http://www.apache.org/licenses/LICENSE-2.0
011 *
012 * Unless required by applicable law or agreed to in writing, software
013 * distributed under the License is distributed on an "AS IS" BASIS,
014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015 * See the License for the specific language governing permissions and
016 * limitations under the License.
017 */
018 package org.apache.camel.component.queue;
019
020 import org.apache.camel.Consumer;
021 import org.apache.camel.Exchange;
022 import org.apache.camel.Processor;
023 import org.apache.camel.impl.ServiceSupport;
024
025 import java.util.concurrent.TimeUnit;
026
027 /**
028 * @version $Revision: 534145 $
029 */
030 public class QueueEndpointConsumer<E extends Exchange> extends ServiceSupport implements Consumer<E>, Runnable {
031 private QueueEndpoint<E> endpoint;
032 private Processor processor;
033 private Thread thread;
034
035 public QueueEndpointConsumer(QueueEndpoint<E> endpoint, Processor processor) {
036 this.endpoint = endpoint;
037 this.processor = processor;
038 }
039
040 @Override
041 public String toString() {
042 return "QueueEndpointConsumer: " + endpoint.getEndpointUri();
043 }
044
045 public void run() {
046 while (!isStopping()) {
047 E exchange;
048 try {
049 exchange = endpoint.getQueue().poll(1000, TimeUnit.MILLISECONDS);
050 }
051 catch (InterruptedException e) {
052 break;
053 }
054 if (exchange != null && !isStopping()) {
055 try {
056 processor.process(exchange);
057 }
058 catch (Throwable e) {
059 e.printStackTrace();
060 }
061 }
062 }
063 }
064
065 protected void doStart() throws Exception {
066 thread = new Thread(this, endpoint.getEndpointUri());
067 thread.setDaemon(true);
068 thread.start();
069 }
070
071 protected void doStop() throws Exception {
072 thread.join();
073 }
074 }