Отправка сообщений в очередь служб Azure с помощью Apache Camel - PullRequest
0 голосов
/ 08 февраля 2019

Мне нужно отправлять сообщения в очередь в служебной шине 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");
}

Когда я запускаю этомаршрут, связь работает, но для каждого сообщения, которое Camel отправляет на 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 Ответ

0 голосов
/ 08 февраля 2019

Похоже, что при каждой отправке верблюжий маршрут создает новое Соединение, что объясняет, почему ваши посылки медленные.Чтобы повысить производительность, вы должны использовать что-то вроде 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...