【发布时间】:2021-09-28 00:44:40
【问题描述】:
我目前正在实现一个写入动态创建的 IBM 队列(模型队列)的 SpringBoot 应用程序。写入后,这些队列不再被释放,这样耦合设施就充满了队列,无法创建新的模型队列。
在我的 SpringBoot 应用程序中,我使用 JMSTemplate 将 TextMessages 写入模型队列(目标)。
如果不再使用资源,队列可以被 QueueManager 关闭,我该怎么办?
以下是Producer的实现。
@Service
public class MessageSender {
private final JmsTemplate jmsTemplate;
public MessageSender(JmsTemplate jmsTemplate) {
this.jmsTemplate = jmsTemplate;
}
/**
* Verschickt eine Bytesmessage an die angegebene Destination
*
* @param destination Zieladresse
* @param text Inhalt der Nachricht
*/
public void sendMessage(Destination destination, String text) {
try {
jmsTemplate.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
jmsTemplate.setDefaultDestination(destination);
jmsTemplate.send(destination, session -> {
TextMessage message = session.createTextMessage(text);
message.setJMSDeliveryMode(DeliveryMode.NON_PERSISTENT);
return message;
});
jmsTemplate.
} catch (InvalidDestinationException e) {
StatisticLogger.logMessageSenderError(destination, text);
}
}
}
@Configuration
@EnableJms
public class JmsConfiguration {
/**
* Erstellt ein neues JMS-Template
* @param connectionFactory Connection-Factory
* @return JMS-Template
*/
@Bean
public JmsTemplate jmsTemplate(ConnectionFactory connectionFactory) {
JmsTemplate jmsTemplate = new JmsTemplate();
jmsTemplate.setConnectionFactory(connectionFactory);
jmsTemplate.setExplicitQosEnabled(true);
// Der Delivery-Mode muss NON_PERSISTANT sein, da die dynamische Rueckantwort-Queue keine persistenten
// Nachrichten verarbeiten kann!
jmsTemplate.setDeliveryPersistent(false);
return jmsTemplate;
}
}
@JmsListener(destination = "${ibm.mq.queue}")
public void receiveMessage(Message message) {
long start = System.currentTimeMillis();
Destination destination = null;
try {
destination = message.getJMSReplyTo();
if (destination == null) {
LOGGER.error(ERROR_MARKER, "Keine ReplyTo-Destination gegeben.");
return;
}
byte[] bytes = getBytesFromByteMessage(message);
Daten daten = processor.generateDatenFromBytes(bytes);
messageSender.sendMessage(destination, buildRzDatenMessage(daten));
} catch (JMSException e) {
...
}
}
希望你能帮助我。
【问题讨论】:
标签: java spring spring-boot jms ibm-mq