我将 JCSMP API 封装在一个类中,并为其他类提供发送和消费消息的方法。
我有以下方法:
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 消息生产者执行操作
我想知道每次调用 send() 后是否关闭了生产者。我应该如何使这个方法线程安全?谢谢你。