Secondo messaggio non pubblicato sul Discourse server

Sto cercando di inviare più di un messaggio al mio server del forum Discourse utilizzando questa API:

Il mio codice 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();

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

Nel mio test sopra, entrambi i messaggi sono stati inviati con successo (non ci sono state eccezioni). Il problema è che dopo aver effettuato l’accesso all’account Discourse, ho visto che solo il primo messaggio è stato ricevuto, ma il secondo messaggio mancava.

Successivamente, ho scoperto che se inserisco un ritardo di 20 secondi tra di loro (cioè nel commento), allora solo entrambi possono essere ricevuti dal server.

Cosa c’è di sbagliato?

La mia versione:

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

Ciao @lenny1 – Ho modificato parti del tuo post perché contenevano informazioni sensibili. Per favore, non pubblicare chiavi API o password, ecc. pubblicamente.

2 Mi Piace

Potresti raggiungere un limite di frequenza. Se questa è la causa, Discourse dovrebbe restituire una risposta 429. Potrebbero esserci alcune informazioni nei tuoi log di errore di Discourse a riguardo. Si trovano in Admin / Logs / Error Logs.

Se non vedi errori lì, prova a registrare la risposta che Discourse invia al server che esegue il tuo codice Java. Questo potrebbe fornire informazioni utili.

3 Mi Piace

A seconda dell’account che stai utilizzando per pubblicare i messaggi, potresti raggiungere il limite di ‘rate limit create topic’ o ‘rate limit create post’.

Sto lavorando a uno script che invia 11 post consecutivamente (in circa un secondo) e funziona correttamente, ma vengono inviati dall’account di sistema che potrebbe non avere limiti di frequenza applicati.

3 Mi Piace

Grazie per la risposta.
Sì, ho ricevuto una risposta da Discourse come segue:
“Stai creando argomenti un po’ troppo velocemente. Attendi 15 secondi prima di riprovare.”
Ho risolto il problema modificando il limite di frequenza nella pagina Admin, impostando la creazione di post e argomenti su 0.
Ora la mia domanda è: è possibile impostare il limite di frequenza solo per un account specifico?

No, il limite di frequenza non può essere impostato per un account specifico. Le impostazioni rate limit create topic e rate limit create post non vengono tuttavia applicate agli account dello staff. Forse questo potrebbe aiutare nel tuo caso d’uso.

2 Mi Piace

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.