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

使用Apache Camel向Azure Servicebus队列发送消息

罗梓
2023-03-14

我需要将消息发送到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");
}

当我开始这条路线时,通信工作,但是对于骆驼发送给Servicebus的每一条消息,我得到了以下日志:

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

Camel正在为每条消息花费一秒钟的时间发送到Servicebus。这是正常的行为吗?有没有可能让骆驼发送得更快?

共有1个答案

柴霖
2023-03-14

似乎在每次发送时,驼峰路由都在创建一个新连接,这可以解释为什么发送速度慢。为了提高性能,您可能希望使用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);
 类似资料:
  • 我是activeMQ的新手,在将消息从驻留在另一台服务器上的消息生成器推送到activeMQ定义的队列时遇到问题。 我在activeMQ上使用camel routes创建的应用程序中有几个队列。我尝试从另一台服务器上的应用程序对这些队列执行远程JNDI查找。我使用了来自http://activemq.apache.org/jndi-support.html页面的activemq文档片段。 我可以连

  • 从跟踪中,我可以看到生产者在连接名称列表中有我的两个活动/备用主机,但也有“localhost”作为host_name和1414作为端口,这是我不能连接到它的原因吗?

  • 我是Spring JMS的新手。我的应用程序是使用Spring Boot开发的,并部署在JBoss EAP7.2.0中。我有一个远程队列,它是一个活动的MQ Artemis队列,也嵌入在JBoss EAP7.2.0中。有人能建议我如何使用Spring Boot的JmsTemplate向远程JMS队列发送消息吗?基本上,我不知道应该如何定义远程connectionFactory来连接到远程队列。

  • 我正在构建Windows Phone应用程序,无法使用Microsoft。服务总线。信息。QueueClient类。 然后,我尝试使用Azure Service Bus REST API进行发送,但这需要我构建一个SAS令牌。但要构建SAS令牌,我需要使用Windows。安全密码学。果心MacAlgorithmNames。HmacSha256。此类显示在前面的类型中,但在编译时它不存在。 如何使用

  • 我有两个独立实例(p1、p2)的生产者应用程序和两个独立实例(c1、c2)的消费者应用程序。 生产者p1连接到exchange,主题为t1,队列名称为name1。 使用者c1连接到exchange,主题为t1,队列名称为name1。 生产者p2连接到exchange,主题为t2,队列名称为name1。 使用者c2连接到exchange,主题为t2,队列名称为name1。 我在RabbitMQ GU

  • 我试图通过驼峰路由将消息放到Weblogic JMS中的队列中。 我的目标是最终配置一个Route以使用来自jms队列的消息,我将早期Route的数据发布到该队列。 这是我的配置: 我的路线如下所示: 我尝试执行此路由时遇到此异常: 我按照以下过程创建了此处提到的队列:https://blogs.oracle.com/soaproactive/entry/how_to_create_a_simpl