骆驼“ activemq组件”的性能问题

时间:2019-09-24 09:12:52

标签: java apache-camel activemq

我尝试使用ActiveMQ组件(在Spring-Boot内部),但最后却有些怪异 结果。

1-我从SEDA向destinationQueue发送了2000条消息

这是我的做法:

from("file:G:/highlight").to("seda:warehouse");
// took less than a millisecond to complete



from("seda:warehouse?concurrentConsumers=20").to("activemq:queue:destinationQueue") 
// Completion time : 58 seconds

Completion time : 58 seconds

2-现在,我尝试使用destinationQueue中的这些文件  这就是我要做的:

        from("activemq:queue:line1").process(new Processor() {
            @Override
            public void process(Exchange exchange) throws Exception {
                System.out.println(exchange.getIn().getBody(String.class));
            }
        });  
// The completion time : around 1 second!
The completion time : around 1 second!

所以我的问题是:

1-当我将文件发送到队列时,为什么速度非常慢?但是我可以吃那些  消息是如此之快(在此测试中,它快了50倍以上)!

  • 我确实在笔记本电脑上进行消费和生产。

任何帮助都会非常感激:))

1 个答案:

答案 0 :(得分:0)

感谢@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

仅此而已:))