Я запустил экземпляр 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 не является потокобезопасным.Есть ли более быстрый способ создания продюсера?