SJMS2 против JMS-компонентов для передачи сообщений от ActiveMQ и к Artemis - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь найти самый быстрый способ использовать Camel для передачи сообщений из одной очереди ActiveMQ Artemis в другую. Я думал, что компонент Camel SJMS2 будет быстрее, чем традиционный компонент Camel JMS , но маршрутизация с компонентом JMS происходит в 2,5 раза быстрее (20 000 против 8 000 мсг / с). Я использую Camel версии 2.20.2 и Artemis версии 2.11.0.

Маршрут с JMS

import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.impl.JndiRegistry;
import org.apache.camel.test.junit4.CamelTestSupport;
import org.junit.Test;
import org.messaginghub.pooled.jms.JmsPoolConnectionFactory;

import javax.jms.ConnectionFactory;
import java.util.concurrent.TimeUnit;

public class JMSTransferTest extends CamelTestSupport {
    @Test
    public void testArtemis() throws Exception {
        TimeUnit.SECONDS.sleep(100);
    }

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            public void configure() {
                from("jms://TEST.IN?connectionFactory=#artemisCF&concurrentConsumers=200")
                        .to("jms://TEST.OUT?connectionFactory=#artemisCF");
            }
        };
    }

    @Override
    protected JndiRegistry createRegistry() throws Exception {
        JndiRegistry registry = super.createRegistry();

        final ConnectionFactory connFactory = new ActiveMQConnectionFactory("tcp://localhost:61622");
        final ConnectionFactory connFactoryDeadLeatter = new ActiveMQConnectionFactory("tcp://localhost:61622");
        JmsPoolConnectionFactory pooledConnectionFactory = new JmsPoolConnectionFactory();

        pooledConnectionFactory.setConnectionFactory(connFactory);
        pooledConnectionFactory.setMaxConnections(20);
        pooledConnectionFactory.setMaxSessionsPerConnection(100);
        registry.bind("artemisCF", pooledConnectionFactory);
        registry.bind("deadLetterCF", connFactoryDeadLeatter);
        return registry;
    }
}

Маршрут с SJMS2, другие настройки, как в приведенном выше коде

@Override
protected RouteBuilder createRouteBuilder() throws Exception {
    return new RouteBuilder() {
        public void configure() {
            from("sjms2://TEST.IN?connectionFactory=#artemisCF&consumerCount=200&asyncStartListener=true")
                    .to("sjms2://TEST.OUT?connectionFactory=#artemisCF");
        }
    };
}

Как использовать компонент SJMS2 для получения тех же скоростей как компонент JMS?

1 Ответ

0 голосов
/ 03 марта 2020

Клаус Ибсен ответил в списке рассылки следующим образом:

200 - это слишком много. Это вместо этого делает это медленнее, поскольку у вас есть 200 потребителей, борющихся за сообщения. Вместо этого попробуйте найти более низкий баланс, который ближе к ядру процессора и т. Д. c.

. Также часто JMS-клиент имеет буфер предварительной выборки (или что-то подобное), что означает, что потребитель может предварительно загрузить 1000 сообщений. и тогда другие 199 потребителей не могут обработать эти сообщения. Поэтому вам также необходимо настроить эту опцию.

Также, если у вас слишком много потребителей и удаленных сетевых подключений, вы слишком болтливы по поводу IO и c. Так что все дело в настройке в зависимости от сценариев использования.

spring-jms имеет встроенный пул потоков, который может автоматически c увеличиваться / уменьшаться в зависимости от нагрузки, и это может объяснить, почему он из коробки без настройка может показаться быстрее.

Запись таких логи c немного сложнее, и это не было добавлено в sjms. Я создал тикет об этом https://issues.apache.org/jira/browse/CAMEL-14637

Вы можете связаться с коммерческими службами поддержки Camel, поскольку есть компании и консультанты, которые имеют большой опыт работы с JMS-брокерами и Camel, а также для их настройки. с очень высокой производительностью. Настройки JVM, ОС и аппаратного обеспечения могут иметь большое значение.

И я также нашел хорошую статью на эту тему: c https://dzone.com/articles/performance-tuning-ideas-for-apache-camel

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...