apache-camel - 使用 Apache Camel 将消息发送到 Azure Servicebus Queue
问题描述
我需要将消息发送到 Azure 服务总线中的队列。我使用 HTTP Post 发送该消息,但我需要提高我的流量,然后我决定测试 AMQP 协议。
代码下方:
public void configure() throws Exception {
AMQPComponent amqp = AMQPComponent.amqpComponent("amqps://server.servicebus.windows.net",
"accessKey", "secretKey");
getContext().addComponent("amqp", amqp);
ActiveMQJMSConnectionFactory connection = new ActiveMQJMSConnectionFactory("tcp://localhost:61616",
"admin", "admin");
getContext().addComponent("amq", JmsComponent.jmsComponent(connection));
from("amq:TEST")
.routeId("fromQueueToAzure")
.autoStartup(true)
.removeHeaders("JMS*")
.to("amqp:amqp.queue")
.log("sent");
}
当我开始这条路线时,通信正常,但是对于骆驼发送到服务总线的每条消息,我都得到了这个日志:
2019-02-07 18:47:11 [main] INFO DefaultCamelContext:3202 - Apache Camel 2.22.0 (CamelContext: camel-1) started in 0.602 seconds
2019-02-07 18:47:12 [AmqpProvider :(1):[amqps://server.servicebus.windows.net:-1]] INFO SaslMechanismFinder:106 - Best match for SASL auth was: SASL-PLAIN
2019-02-07 18:47:12 [AmqpProvider :(1):[amqps://server.servicebus.windows.net:-1]] INFO JmsConnection:1329 - Connection ID:5f75145f-6f10-4867-a590-782e507d51a8:1 connected to remote Broker: amqps://server.servicebus.windows.net
2019-02-07 18:47:13 [Camel (camel-1) thread #1 - JmsConsumer[TEST]] INFO fromQueueToAzure:159 - sent
2019-02-07 18:47:14 [AmqpProvider :(2):[amqps://server.servicebus.windows.net:-1]] INFO SaslMechanismFinder:106 - Best match for SASL auth was: SASL-PLAIN
2019-02-07 18:47:14 [AmqpProvider :(2):[amqps://server.servicebus.windows.net:-1]] INFO JmsConnection:1329 - Connection ID:08ea246c-523e-4eb3-822e-c7d7b26aea85:2 connected to remote Broker: amqps://server.servicebus.windows.net
2019-02-07 18:47:15 [Camel (camel-1) thread #1 - JmsConsumer[TEST]] INFO fromQueueToAzure:159 - sent
2019-02-07 18:47:16 [AmqpProvider :(3):[amqps://server.servicebus.windows.net:-1]] INFO SaslMechanismFinder:106 - Best match for SASL auth was: SASL-PLAIN
2019-02-07 18:47:16 [AmqpProvider :(3):[amqps://server.servicebus.windows.net:-1]] INFO JmsConnection:1329 - Connection ID:c8c40237-a73c-43cf-970d-c5cbf726eb21:3 connected to remote Broker: amqps://server.servicebus.windows.net
2019-02-07 18:47:17 [Camel (camel-1) thread #1 - JmsConsumer[TEST]] INFO fromQueueToAzure:159 - sent
骆驼每条消息花费一秒钟发送到服务总线。这是正常行为吗?是否可以让骆驼发送更快?
解决方案
看来,骆驼路线在每次发送时都会创建一个新的连接,这样就可以解释为什么您的发送速度很慢。为了提高性能,您可能希望使用PooledJMS 之类的东西来创建连接池,以便在每次发送时不会重新创建新连接和随附的资源。
您可以尝试以下类似的方法,它使用 camel-amqp 组件,但直接使用 Qpid JMS 和 PooledJMS 来配置它。
JmsConnectionFactory cf = new JmsConnectionFactory("amqp://localhost:5672");
JmsPoolConnectionFactory pooledCF = new JmsPoolConnectionFactory();
pooledCF.setConnectionFactory(cf);
AMQPComponent component = new AMQPComponent();
component.setConnectionFactory(pooledCF);
CamelContext context = new DefaultCamelContext();
context.addComponent("amqp", component);
推荐阅读
- git - 当具有更改文件的分支合并到主分支时,Git 不会引发合并冲突
- python - 带有日期选择器的 Python selenium
- javascript - 在 Promise.race() 中,失去承诺会发生什么?
- javascript - 意外的模板字符串表达式
- python - 如何以有效的方式将n维列表排序为一个列表
- r - 我有一个可以工作的函数,想在一个循环中为列表中的多个数据帧运行它,但不知道如何更新数据帧?
- regex - PowerShell 脚本检查所有目录的名称并在每个目录中创建子文件夹
- c++ - 运行时无法加载由协议缓冲区静态库链接的节点 js 本机插件
- css - 如何在整个项目博览会中加载字体?
- django - 使用 mod_wsgi、Django、Celery 和 RabbitMQ 每秒重新加载的 DisabledBackend 错误