Я нашел это благодаря @ Alexey-yakunin :)
Когда вы работаете с ActiveMQ, если вашим пунктом назначения является «очередь», то скорость создания сообщений в очередь является очень высокоймедленнее, чем потреблять из очереди.Это потому, что, как @ Alexey-yakunin сказал «когда вы отправляете сообщения в очередь ActiveMQ, вы помещаете их в базу данных. База данных находится на вашем жестком диске (узкое место). Чтение из базы данныхбыстрее, чем писать в него ".
Итак, чтобы доказать эту теорию, я сделал этот тест:
(Вместо отправки сообщений на queue
я отправил их на topic
без каких-либо длительныхподписчики)
No durable subscribers to the topic == No databse
from("file:G:/highlight").to("activemq:topic:newVersion");
from("activemq:topic:newVersion").process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
long time = System.currentTimeMillis();
Date date = new Date(time);
System.out.println(date);
}
});
Для 2000 messages
Потребовалось всего 3 seconds
для создания и потребления всех сообщений.
Также это параметры, которые я установил при весенней загрузке application.properties
, чтобы получить максимальную отдачу от activemq:
camel.component.activemq.broker-u-r-l=tcp://localhost:61616
// By default it is set to false so make sure you set this to true
camel.component.activemq.use-pooled-connection=true
camel.component.activemq.transacted=false
//Remember, the messages will be lost if the broker crashes or is restarted.
camel.component.activemq.delivery-persistent=false
camel.component.activemq.wait-for-provision-correlation-to-be-updated-thread-sleeping-time=50
Есть два других параметра, которые стимулируют вас изменять их значение,но я нашел их в лучшем случае, когда они установлены со значениями по умолчанию:
camel.component.activemq.concurrent-consumers
camel.component.activemq.max-concurrent-consumers
Вот и все:))