Я пытаюсь выполнить приложение под (разумной) нагрузкой.Под нагрузкой происходит то, что при попытке поместить сообщение в очередь приложение останавливается примерно на 4 секунды, прежде чем завершить отправку.Странно то, что сразу после этого следующему сообщению требуется несколько миллисекунд для помещения в очередь.Сообщение фактически является тем же сообщением, поэтому размер сообщения не имеет значения.
Приложение использует Spring Boot 2.1.6, Apache Qpid 0.43.0 в качестве поставщика JMS / AMQP.
Используемой шиной сообщений является Azure ServiceBus, но я наблюдал то же поведение при использовании Artemis.
В Apache Qpid JmsConnectionFactory я попытался поиграться со свойствами «forceSyncSend».
Я пытался использовать Spring Boot CachingConnectionFactory для кэширования только производителей сообщений.Я увеличил размер кэша по умолчанию с 1 до 20. Безуспешно.
Я посмотрел параметры JmsTemplate, но не могу найти никаких параметров в отношении производителей сообщений (много со слушателями, но это другая история).
Код, выполняющий отправку, довольно прост:
private void sendToQueue(Object message, String queueName) {
jmsTemplate.convertAndSend(queueName, message, (Message jmsMessage) -> {
jmsMessage.setStringProperty(OBJECT_TYPE_PARAMETER, message.getClass().getSimpleName());
return jmsMessage;
});
Есть что-нибудь очевидное, чтобы попробовать?Есть ли какие-либо параметры настройки, чтобы остановить этот срыв?
Нагрузка на систему не является тривиальной, но она не чрезмерна (она должна быть намного выше, чем в данный момент!)
Есть идеи?