ActiveMQ - после долгого времени, брокер принимает сообщения, но ничего не ставит в очередь - PullRequest
0 голосов
/ 25 февраля 2020

Моя конфигурация:

  • ActiveMQ 5.15.1
  • транзакции atomikos jms 4.0.6
  • Пружинная загрузка 2.1.7.RELEASE

Мое приложение отправляет сообщения методом Spring JmsTemplate.convertAndSend:

import org.springframework.jms.core.JmsTemplate;

@Component
@Slf4j
public class AsynchronousMajProducer {

  @Autowired
  private ActiveMQConfig activeMQConfig;
  @Autowired
  private JmsTemplate jmsTemplate;

  private void convertAndSend(String msg) {
     jmsTemplate.convertAndSend(activeMQConfig.privateQueue(), msg, message -> {
         String[] versionParts = buildProperties.getVersion().split("\\.");
         String version = versionParts[0] + "." + versionParts[1];
         message.setStringProperty("VERSION", version);
         message.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, 2000);
         return message;
     });
  }
}

После долгого времени работы (несколько недель) некоторые очереди больше не ставят сообщения в очередь (а некоторые работают хорошо).

Для тех, кто терпит неудачу, метод convertAndSend не выдает никаких исключений, все вроде бы в порядке, но, наконец, ничего не ставится в очередь ... (количество запросов в очередь на консоли AMQ никогда не увеличивается).

Ниже приведен журнал AMQ при успешной отправке:

2019-11-22 09:37:29,647 | INFO  | Sending message: ActiveMQTextMessage {commandId = 8, responseRequired = false, 
messageId = ID:NMI16510-60675-1574375565048-1:23:2:1:1, originalDestination = null, originalTransactionId = null, 
producerId = ID:NMI16510-60675-1574375565048-1:23:2:1, destination = queue://testportail, 
transactionId = XID:[1096044365,globalId=3137322e31372e36352e37372e746d313537343337353834383839343030343731,
branchId=3137322e31372e36352e37372e746d343732], expiration = 1574375885026, timestamp = 1574375849026, 
arrival = 0, brokerInTime = 0, brokerOutTime = 0, correlationId = null, replyTo = null, persistent = 
true, type = null, priority = 9, groupID = null, groupSequence = 0, targetConsumerId = null, compressed = false, 
userID = null, content = org.apache.activemq.util.ByteSequence@15d17509, marshalledProperties = org.apache.activemq.util.ByteSequence@34beb533, 
dataStructure = null, redeliveryCounter = 0, size = 1122, properties = {VERSION=2.0, AMQ_SCHEDULED_DELAY=2000}, 
readOnlyProperties = false, readOnlyBody = false, droppable = false, jmsXGroupFirstForConsumer = false, 
text = {
  "type" : "MAJ_CONTACT",
  "id" : 124
}} | org.apache.activemq.broker.util.LoggingBrokerPlugin | ActiveMQ Transport: tcp:///172.17.65.77:61220@61611

2019-11-22 09:37:32,001 | DEBUG | Firing: Job [id=ID:NMI16510-60675-1574375565048-1:23:2:1:1, startTime=Fri Nov 22 09:37:30 NCT 2019, 
delay=2000, period=0, repeat=0, nextTime=Fri Nov 22 09:37:32 NCT 2019, executionCount = 1] | org.apache.activemq.store.kahadb.scheduler.JobSchedulerImpl 
| JobScheduler:JMS

2019-11-22 09:37:32,002 | DEBUG | Set message ID:NMI16510-60675-1574375565048-1:23:2:1:1 timestamp from 1574375849026 to 1574375852002 
| org.apache.activemq.broker.scheduler.SchedulerBroker | JobScheduler:JMS

2019-11-22 09:37:32,003 | DEBUG | ACTIVEMQ Message ID:NMI16510-60675-1574375565048-1:23:2:1:1 sent to queue://testportail 
| org.apache.activemq.broker.region.Queue | JobScheduler:JMS

При сбое я получаю только первый журнал Sending message. Нет сообщений ERROR или WARN в журнале AMQ. Я заметил, что на некоторые очереди влияют, а на другие нет.

Чтобы «исправить» проблему, я должен:

  1. Остановить посредника
  2. Удалить эту папку: /apache-activemq-5.15.1/data/ACTIVEMQ/scheduler
  3. Перезапустите брокера

На производстве мы делаем это каждый день, чтобы предвидеть эту проблему. Это не очень хорошее решение, поскольку сообщения, ранее отправленные приложением, но не помещенные в очередь, окончательно теряются.

Это известная проблема планировщика AMQ? Это плохая / хорошая практика, часто перезапускайте AMQ?

1 Ответ

0 голосов
/ 08 апреля 2020

Я только что нашел относительную проблему, но для Топи c здесь: [http://activemq.2283324.n4.nabble.com/ActiveMQ-Topic-Messages-Not-Delivered-td4703502.html] Она была решена путем нажатия на storeUsage и tempUsage в activemq. xml:

Original
            <storeUsage>
                <storeUsage limit="100 gb"/>
            </storeUsage>
            <tempUsage>
                <tempUsage limit="50 gb"/>
            </tempUsage>
Modification
            <storeUsage>
                <storeUsage limit="20 mb"/>
            </storeUsage>
            <tempUsage>
                <tempUsage limit="20 mb"/>
            </tempUsage>

Проблема заключалась в том, что проблема с хранилищем для kahadb была меньше, чем 100 Go.

Благодаря swone!

...