可以像这样与 Camel 同时处理文件
from("file://incoming?maxMessagesPerPoll=1&idempotent=true&moveFailed=failed&move=processed&readLock=none").threads(5).process()
看看http://camel.apache.org/file2.html
但我认为使用独立的 ActiveMQ、将文件移动到 ActiveMQ 的独立服务和独立的消费者能够独立地杀死或重新启动每个消费者会更好地满足您的要求。
正如您所说,最好使用 ActiveMQ,您可以轻松地创建一个服务来使用 Camel 将消息移动到队列中,如下所示:
CamelContext context = new DefaultCamelContext();
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory("vm://localhost?broker.persistent=true");
context.addComponent("test-jms", JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
context.addRoutes(new RouteBuilder() {
public void configure() {
// convertBodyTo to use TextMessage or maybe send them as file to the Queue from("file://testFolderPath").convertBodyTo(String.class).to("test-jms:queue:test.queue");
}
});
context.start();
这里有一些例子
http://www.programcreek.com/java-api-examples/index.php?api=org.apache.camel.component.jms.JmsComponent
https://skills421.wordpress.com/2014/02/08/sending-local-files-to-a-jms-queue/
https://github.com/apache/camel/blob/master/examples/camel-example-jms-file/src/main/java/org/apache/camel/example/jmstofile/CamelJmsToFileExample.java
https://github.com/apache/camel/tree/master/examples
要监控和管理,您可以将 jmx 与 VisualVM 或 Hawtio 一起使用http://hawt.io/getstarted/index.html
http://camel.apache.org/camel-jmx.html
要消费,您可以将 DefaultMessageListenerContainer 与队列上的并发消费者一起使用,为此您需要更改 DefaultMessageListenerContainer 的 ConnectionFactory 上的 prefetchPolicy ,多线程 JMS 客户端 ActiveMQ