当前位置: 首页 > 知识库问答 >
问题:

与骆驼的性能问题"active emq组件"

越福
2023-03-14

我试着使用ActiveMQ组件(在Spring Boot内部),但最终得到了一些奇怪的结果。

1-我从SEDA发送了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个答案

窦英武
2023-03-14

多亏了@Alexey yakunin:)

使用ActiveMQ时,如果目的地是“队列”,则向队列生成消息的速度要比从队列中消费消息的速度慢得多。这是因为,正如@Alexey yakunin所说,“当你向ActiveMQ队列发送消息时,你把它们放在数据库中。数据库位于你的硬盘驱动器上(瓶颈)。从数据库读取消息比向数据库写入消息要快”。

为了证明这个理论,我做了一个测试:

(而不是发送消息到队列我将它们发送到主题没有任何持久的订阅者)

主题没有持久订阅者==没有数据库

        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条消息,只需3秒即可生成和使用所有消息。

这些也是我在spring boot应用程序中设置的选项。属性为了充分利用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

仅此而已:))

 类似资料:
  • 我的骆驼路线如下。我正在使用SMPPSim作为模拟器... 我面临以下问题..... exchangeId的传递失败:传递尝试后耗尽:捕获到6:org.jsmpp.extra.NegativeResponseException:找到否定响应0000000 b。由故障处理器处理:FatalFallbackErrorHandler[Channel[sendTo(Endpoint[jms://queue

  • 我刚刚开始将Apache Camel用于集成项目。我正在使用将对象持久化到mysql,但mybatisendpoint无法通过以下Trace消息解析: 2016-07-19 15:50:15跟踪事件助手:800-通知者:org。阿帕奇。骆驼impl。DefaultRuntimeEndpointRegistry@5847e0b4未为事件启用:由于未能在以下位置创建路由route1,无法启动Camel

  • 我的测试处理器: 所以我有下一种情况:1)骆驼成功地从“test-camel-start”队列读取消息2)基处理器成功地处理消息3)在重试将消息传递到“test-camel-success”时失败 我收到了下一个日志跟踪: Log说“请求必须包含参数MessageBody”。 我不知道为什么这个消息体没有出现。

  • 通过打开到同一主机的多个连接(例如、),是否有任何方法可以提高文件传输性能?

  • 我正在尝试通过angle 4上传一个带有pdf文件的表单 该请求是一个多部分/表单数据请求 我正在使用springboot、apachecamelservlet,我的路径是 在我的处理器中 然后我正在尝试写入如下文件: 无论我怎么尝试,文件总是被破坏。无法在Acrobat reader中打开。

  • 我将我的Fabric8 Spring Boot Camel pom.xml升级到使用Camel 2.16.0,但并非所有组件都在2.16.0中可用 我不得不将以下组件保留在2.15.3,因为我得到了2.16.0版本的“丢失项目”: 骆驼指标 骆驼jsonpath 骆驼Spring靴 这些在Camel 2.16.0中不可用吗? 我使用的是Fabric8版本2.2.46和Spring Boot版本1.