我试着使用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倍多)!!!
任何帮助都将不胜感激:))
多亏了@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.