Я инкапсулировал 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-сообщения
Интересно, закрыт ли производитель после каждого вызова для отправки(). Как я могу сделать этот метод потокобезопасным? Спасибо.
Привет, вы обошли эту проблему? или все еще получить его? – MozenRath