Как улучшить производительность при создании JMSProducer? - PullRequest
0 голосов
/ 25 февраля 2019

Я запустил экземпляр Wildfly 10 со встроенным ActiveMQ Artemis в одном экземпляре.Во второй раз я подключаюсь к MQ через pooled-connection-factory.Однако при создании JMSProducer производительность ужасна;Запуск jProfiler показывает, что для создания источника может потребоваться 4-5 с.

@Inject
public JMSMessagePublisherServiceImpl(@JMSConnectionFactory("java:/jms/RemoteConnectionFactory") JMSContext jmsContext,) {
    this.jmsContext = jmsContext;
}

public void publishMessage(JndiEntry destination, Serializable object, String messageSelector, int priority, long timeToLive){
    if(destination == null){
        throw new IllegalArgumentException("destination cannot be empty");
    }

    // check the priority level
    Validate.inclusiveBetween(0, 9, priority, "Priority must be between 0 and 9");

    try{
        // create a topic publisher
        JMSProducer jmsProducer =   jmsContext.createProducer();
        jmsProducer.setPriority(priority);
        jmsProducer.setTimeToLive(timeToLive);

        ...
        ...

Потребительский узел JB настроен следующим образом:

   <pooled-connection-factory name="remote-artemis" password="${artemis.user.password}" user="${artemis.user.name}" entries="java:/jms/RemoteConnectionFactory" connectors="remote-http-connector">
      <inbound-config jndi-params="java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory;java.naming.provider.url=${artemis.jndi.url};java.naming.security.principal=${artemis.user.name};java.naming.security.credentials=${artemis.user.password}" use-jndi="true"/>
    </pooled-connection-factory>

Что можно сделать для повышения производительности?Каждый вызов метода publishMessage() создает нового производителя.Можно ли объединить производителей (например, Apache Object Pool)?Насколько я понимаю, JMSProducer не является потокобезопасным.Есть ли более быстрый способ создания продюсера?

...