2016-06-03 2 views
1

Я инкапсулировал API JCSMP в класс и предоставлял методы для других классов для отправки и потребления сообщений.Почему XMLMessageProducer закрыт при вызове несколькими потоками?

У меня есть следующий метод:

public void send(byte[] data, String queueName) throws JCSMPException { 
    // Acquire a message producer 
    if (producer == null) { //producer is an instance of XMLMessageProducer 
     producer = session.getMessageProducer(new PublishCallback()); 
    } 

    Queue queue = JCSMPFactory.onlyInstance().createQueue(queueName); 
    BytesMessage msg = JCSMPFactory.onlyInstance().createMessage(BytesMessage.class); 
    msg.setData(data); 
    msg.setDeliveryMode(DeliveryMode.PERSISTENT); 

    logger.info("Sending to \"{}\"", queueName); 

    producer.send(msg, queue); 
} 

Когда я несколько потоков вызов этого метода, один раз в то время, я заметил следующее исключение:

com.solacesystems.jcsmp.ClosedFacilityException: Пробовал для выполнения операции над создателем закрытого XML-сообщения

Интересно, закрыт ли производитель после каждого вызова для отправки(). Как я могу сделать этот метод потокобезопасным? Спасибо.

+0

Привет, вы обошли эту проблему? или все еще получить его? – MozenRath

ответ

0

XMLMessageProducer не закрывается после каждого звонка для отправки.

Первый шаг здесь - выяснить, почему ваш XMLMessageProducer закрыт. Самый простой способ сделать это - включить ведение журнала API Solace в INFO (или даже DEBUG) и отредактировать ваш вопрос, чтобы включить журналы журнала Solace до первого ClosedFacilityException.

Возможна одна причина, по которой ваше приложение отключено, но не удалось автоматически подключиться к устройству Solace/VMR.

Смежные вопросы