По какой-то причине я часто сталкиваюсь с проблемой освобождения очереди, когда доставленное сообщение всегда отстает от фактически отправленного. Джеймс настроен на отправку входящих сообщений на шлюз (Postfix).
Класс RemoteDelivery имеет это:
// Set it to try to deliver (in a separate thread) immediately
// (triggered by storage)
Что такое «хранилище» и где настраивается?
Я установил почтовый ящик, который отправляет совпадающие сообщения (на основе домена получателя) на шлюз (указанный в mailetcontainer). Это работает нормально до тех пор, пока не «застревает», чтобы быть доставленным на шлюз. В журналах Джеймса это отображается как Successfully spooled mail
от отправителя, а затем отображается как
[TID=83] INFO 11:04:54,858 | james.smtpserver | Id='1510412390' User='' Successfully spooled mail Mail1581005094857-978ba32f-74e6-4ca1-b903-7994637a9873 from <address@remote> on <remote sender IP> for [<address@local>]
...
[TID=734] INFO 11:04:55,290 | james.mailetcontext | Remotely delivering mail Mail1581005094857-978ba32f-74e6-4ca1-b903-7994637a9873
[TID=34] INFO 11:04:55,290 | james.mailetcontext | Remote delivery thread (0) will process mail Mail1581005072858-90055113-03cf-4bc0-84d7-d47d176feef2
[TID=34] INFO 11:04:55,290 | james.mailetcontext | Attempting to deliver Mail1581005072858-90055113-03cf-4bc0-84d7-d47d176feef2
[TID=734] INFO 11:04:55,312 | james.mailetcontext | Adding SMTP gateway: <gateway address>
[TID=734] INFO 11:04:55,312 | james.mailetcontext | Sending mail to [<address@local>] via [<gateway address>]
[TID=34] INFO 11:04:55,312 | james.mailetcontext | Adding SMTP gateway: <gateway adrdress>
[TID=34] INFO 11:04:55,312 | james.mailetcontext | Attempting delivery of Mail1581005072858-90055113-03cf-4bc0-84d7-d47d176feef2 to host <gateway adrdress> at <gateway adrdress> from <address@remote> for addresses [<address@local>]]
но я не вижу, чтобы почта была успешно отправлена на шлюз.
Чтобы он «открепился», мне нужно, чтобы другое входящее сообщение было отправлено Джеймсу, которое попадет в тот же почтовый ящик, чтобы отправить предыдущее сообщение в буфер, которое застряло раньше. Тогда в журналах Джеймса это будет отображаться как
[TID=35] INFO 11:22:14,443 | james.mailetcontext | Mail (Mail1581005094857-978ba32f-74e6-4ca1-b903-7994637a9873) sent successfully to <gateway adrdress> at <gateway adrdress> from <address@remote> for [[<address@local>]]
Похоже, что если узел ретрансляции изменится, соответствующая очередь может начать вести себя по-другому, действуя как трубка из бумажного полотенца с шариками для пинг-понга, вставленными в один конец. Только когда будет вставлено достаточно шариков, вытащите один из другого конца. Есть мысли по этому поводу?
Выяснилось, что у ActiveMQ версии 5.4.2 есть проблема. Обновился до 5.5.1, и проблема с очередью исчезла.