Второе сообщение не отправлено на сервер Discourse

Я пытаюсь отправить более одного сообщения на свой сервер форума Discourse, используя этот API:

Мой код на Java:

public void test() 
		throws UnirestException, JsonMappingException, JsonProcessingException, InterruptedException {
	
	Unirest.config().cookieSpec(CookieSpecs.IGNORE_COOKIES);
	
	Map<String, String> header = new HashMap<>();
	header.put("Content-Type", "application/json");
	header.put("Api-Key", [redacted]);
	header.put("Api-Username", [redacted]);	    
    header.put("Accept", "application/json");

	
	Unirest.post(URL + "/posts.json")
			.headers(header)
			.queryString("title","1st Msg")
			.queryString("raw", "Message 1")
			.queryString("target_recipients", "Kenny")
			.queryString("archetype", "private_message")
			.asJson();

	
   // TimeUnit.SECONDS.sleep(20);
	
	
	Unirest.post(URL + "/posts.json")
			.headers(header)
			.queryString("title","2nd Msg")
			.queryString("raw", "Message 2")
			.queryString("target_recipients", "Kenny")
			.queryString("archetype", "private_message")
			.asJson();
}

В моём тесте выше оба сообщения были отправлены успешно (исключений не возникло). Проблема в том, что после входа в учётную запись Discourse я увидел только первое сообщение, а второе отсутствовало.

Позже я обнаружил, что если добавить задержку в 20 секунд между ними (как в закомментированной строке), то оба сообщения будут получены сервером.

Что не так?

Мои версии:

  • Discourse 3.1.0.beta2
  • Java 11
  • unirest-java 3.14.2

Привет @lenny1 — я удалил части вашего сообщения, так как они содержали конфиденциальную информацию. Пожалуйста, не публикуйте публично API-ключи, пароли и т.п.

Возможно, вы упираетесь в ограничение скорости запросов. Если это причина, то Discourse должен возвращать ответ с кодом 429. В логах ошибок Discourse может быть дополнительная информация об этом. Они находятся в разделе Администрирование / Логи / Логи ошибок.

Если вы не видите там никаких ошибок, попробуйте логировать ответ, который Discourse отправляет серверу, на котором выполняется ваш Java-код. Это может дать полезную информацию.

В зависимости от того, с какого аккаунта вы публикуете сообщения, вы можете упереться в «лимит скорости создания темы» или «лимит скорости создания поста».

Я сейчас работаю над скриптом, который отправляет 11 постов подряд (в течение примерно секунды), и это работает нормально, но они отправляются от имени системного аккаунта, к которому, возможно, не применяются лимиты скорости.

Спасибо за ответ.
Да, я получил ответ от Discourse, вот что там было:
«Вы создаете темы слишком быстро. Пожалуйста, подождите 15 секунд перед повторной попыткой».
Я решил проблему, изменив лимит скорости на странице администратора, установив создание постов и тем на 0.
Теперь мой вопрос: можно ли установить лимит скорости только для конкретного аккаунта?

Нет, ограничение скорости нельзя установить для конкретного аккаунта. Однако настройки rate limit create topic и rate limit create post не применяются к аккаунтам сотрудников. Возможно, это поможет в вашем случае.