2015-09-25 181 views
1

在我們的設置中,我們使用駱駝,jms,spring和hibernate,並且我們有很多相同種類的消息。所以它們需要由一個處理器來處理,這是由Spring創建的。但我可以看到,處理器只運行一次。駱駝不會爲一個消費者處理消息

enter image description here

我檢查了threaddump和日誌了,所以我現在可以說,這是一個事實,該軟件不能擴展的正確途徑。

那麼我在做什麼錯了? 在此先感謝。

public class MyRouteBuilder extends SpringRouteBuilder { 

@Autowired 
ApplicationContext context; 

@Override 
public void configure() throws Exception { 
    final String endpointUri ="...." 
    final RouteDefinition rd = this.from(endpointUri); 
    final ThreadsDefinition td = rd.threads(); 
    td.process(this.context.getBean(MyProcessor.class)); 
} 


@Component 
public class MyProcessor implements Processor { 
private final Logger log = LogManager.getLogger(this.getClass()); 

@Autowired 
ApplicationContext context; 

@PostConstruct 
public void init() { 
    // Do something 
} 

@Override 
public void process(Exchange exchange) throws Exception { 
    //Process the message and doing some stuff with the database 
} 

}

<camel:camelContext> 
    <camel:package>tld.mycompany</camel:package> 
    <camel:threadPool id="camelsThreadPool" poolSize="8" 
     rejectedPolicy="CallerRuns" maxPoolSize="32" maxQueueSize="50000" 
     threadName="CamelsThreadPool"></camel:threadPool> 
</camel:camelContext> 
+1

在JMS端點上使用asyncConsumer = true或更好地使用其併發選項 –

+1

另請參見SO:http://stackoverflow.com/questions/32700699/thread-dsl-behavior-with-queue-in-camel –

回答

0

謝謝克勞斯 - 就是這樣。

解決方法是使用將「?asyncConsumer = true」附加到端點url。