Работает нормально долгое время.эта ошибка просто возникает, когда я пытаюсь зациклить 10000 элементов и отправить один за другим в очередь jms.
При попытке отправить сообщение в мою очередь JMS появляется следующая ошибка:
org.springframework.jms.UncategorizedJmsException: исключение без категории произошло во время обработки JMS;Вложенное исключение - javax.jms.JMSException: java.lang.InterruptedException в org.springframework.jms.support.JmsUtils.convertJmsAccessException (JmsUtils.java:316) в org.springframework.jms.support.JjavaAccess.conf169) в org.springframework.jms.core.JmsTemplate.execute (JmsTemplate.java:487) в org.springframework.jms.core.JmsTemplate.send (JmsTemplate.java:570) в com.shop.my.utility.exception..GlobalExceptionHandler.handleMyException (GlobalExceptionHandler.java:82) в com.shop.my.myengine.scheduler.GlobalTimeoutScheduler.lambda $ 11 (GlobalTimeoutScheduler.java:182) в java.util.ArrayList.forEach в массиве (55): массив.shop..GlobalTimeoutScheduler.lambda $ 5 (GlobalTimeoutScheduler.java:103) в java.util.HashMap.forEach (HashMap.java:1289) по адресу com.shop.my.myengine.scheduler.GlobalTimeoutScheduler.processGlobalTimeout (GlobalTimeoutScheduler.java:100) по адресу com.shop.my.myengine.scheduler.GlobalTimeoutTimelaSlaydu.: 70) в java.util.HashMap.forEach (HashMap.java:1289) в com.shop.my.myengine.scheduler.GlobalTimeoutScheduler.scheduleProcessGlobalTimeout (GlobalTimeoutScheduler.java:69) в sun.reflect.NativeMethod) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lanke.ho.jj.jj.springframework.scheduling.support..java: 511) на java.util.concurrent.FutureTask.runAndReset (FutureTask.java:308) в java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 301 (ScheduledThreadPoolExecutor.java: 180): 294) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1149) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:624) в java.lang.Thread.java: 748) Вызвано: javax.jms.JMSException: java.lang.InterruptedException в org.apache.activemq.artemis.jms.client.ActiveMQMessageProducer.doSendx (ActiveMQMessageProducer.java:494) в org.apache.activem.jms.client.ActiveMQMessageProducer.send (ActiveMQMessageProducer.java:198) в org.springframework.jms.connection.CachedMessageProducer.send (CachedMessageProducer.java:181) в sun.reflect.GeneratedMethodAccessreDelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) в java.lang.reflect.Method.invoke (Method.java:498) в org.springframework.jms.connection.CachedMessageProducer $ Jms2MessageProducerInvocationHandler.invoke (Cached). $ Proxy346.send (Неизвестный источник) в org.springframework.jms.core.JmsTemplate.doSend (JmsTemplate.java:626) в org.springframework.jms.core.JmsTemplate.doSend (JmsTemplate.java:597)в
org.springframework.jms.core.JmsTemplate $ 4.doInJms (JmsTemplate.java:574)
в
org.springframework.jms.core.JmsTemplate.execute (JmsTemplate.java:484)
... еще 25 причин:
org.apache.activemq.artemis.api.core.ActiveMQInterruptedException:
java.lang.InterruptedException в
org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.sendBlocking (ChannelImpl.java:380)
в
org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.sendBlocking (ChannelImpl.java:318)
в
org.apache.activemq.artemis.core.protocol.core.impl.ActiveMQSessionContext.sendFullMessage (ActiveMQSessionContext.java:418)
в
org.apache.activemq.artemis.core.client.impl.ClientProducerImpl.sendRegularMessage (ClientProducerImpl.java:287)
в
org.apache.activemq.artemis.core.client.impl.ClientProducerImpl.doSend (ClientProducerImpl.java:263)
в
org.apache.activemq.artemis.core.client.impl.ClientProducerImpl.send (ClientProducerImpl.java:126)
в
org.apache.activemq.artemis.jms.client.ActiveMQMessageProducer.doSendx (ActiveMQMessageProducer.java:491)
... еще 36 причин: java.lang.InterruptedException at
java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject.reportInterruptAfterWait (AbstractQueuedSynchronizer.java:2014)
в
java.util.concurrent.locks.AbstractQueuedSynchronizer $ ConditionObject.await (AbstractQueuedSynchronizer.java:2173)
в
org.apache.activemq.artemis.core.protocol.core.impl.ChannelImpl.sendBlocking (ChannelImpl.java:378)
... еще 42
Мой JMSConfig:
@Configuration
public class JMSConfig {
@Value("${spring.artemis.host}")
private String artemisHost;
@Value("${spring.artemis.port}")
private String artemisPort;
@Value("${spring.artemis.user}")
private String artemisUser;
@Value("${spring.artemis.password}")
private String artemisPass;
@Bean
@Primary
public CachingConnectionFactory cachingConnectionFactory() {
StringBuilder artemisURL = new StringBuilder();
artemisURL.append("tcp://").append(artemisHost).append(":").append(artemisPort).append("?jms.useAsyncSend=true");
ActiveMQConnectionFactory artemiConnFactory = new ActiveMQConnectionFactory(artemisURL.toString());
artemiConnFactory.setUser(artemisUser);
artemiConnFactory.setPassword(artemisPass);
artemiConnFactory.setConsumerWindowSize(0);
CachingConnectionFactory cachingConnectionFactory = new CachingConnectionFactory(artemiConnFactory);
cachingConnectionFactory.setSessionCacheSize(20);
return cachingConnectionFactory;
}
@Bean
@Primary
public JmsTemplate jmsTemplate(@Qualifier("cachingConnectionFactory") CachingConnectionFactory connectionFactory) {
JmsTemplate jmsTemplate = new JmsTemplate(connectionFactory);
return jmsTemplate;
}
}
Мой обработчик класса помогает отправить сообщение в очередь:
@Aspect
@Component
public class MyGlobalExceptionHandler {
@Autowired
private JmsTemplate jmsTemplate;
@Value("${environment}.${errlog.log.queue}")
private String errorLogQueue;
@Value("${spring.application.name}")
private String applicationName;
@AfterThrowing(
pointcut = "within(com.my.service..*..*) && (@annotation(org.springframework.web.bind.annotation.RequestMapping) || @annotation(org.springframework.jms.annotation.JmsListener))",
throwing = "myException")
public Response<Void> handleException(MyException myException) {
ErrLogRequest logRequest = LoggerBuilder.build(myException, applicationName);
jmsTemplate.send(errorLogQueue, session -> session.createTextMessage(logRequest.toString()));
return Response.<Void>builder().status(myException.errorCode).build();
}
}