Spring JMSTemplate UncategorizedJmsException с ArtemisMQ - PullRequest
0 голосов
/ 25 апреля 2018

Работает нормально долгое время.эта ошибка просто возникает, когда я пытаюсь зациклить 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();
  }
}

1 Ответ

0 голосов
/ 25 апреля 2018

Вызвано: java.lang.InterruptedException at

Что-то в вашем приложении прервало ваш поток во время отправки.

...