1
在我們的設置中,我們使用駱駝,jms,spring和hibernate,並且我們有很多相同種類的消息。所以它們需要由一個處理器來處理,這是由Spring創建的。但我可以看到,處理器只運行一次。駱駝不會爲一個消費者處理消息
我檢查了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>
在JMS端點上使用asyncConsumer = true或更好地使用其併發選項 –
另請參見SO:http://stackoverflow.com/questions/32700699/thread-dsl-behavior-with-queue-in-camel –