我目前正在实现一个写入动态创建的SpringBoot队列(模型队列)的IBM应用程序。在写入之后,这些队列不再被释放,因此耦合设施充满了队列,并且不能创建新的模型队列。
在我的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) {
...
}
}我希望你能帮助我。
发布于 2021-07-20 22:06:47
检查您的模型队列定义。由于TDQ不能是共享队列(使用耦合设施),因此您必须使用一个永久的动态队列,该队列将在关闭之后仍然存在。
https://stackoverflow.com/questions/68455975
复制相似问题