Ho la seguente applicazione PHP. Che pubblica un utente registrati a una coda di messaggi. L'applicazione Java legge da quella coda e la importa. Speriamo che lo schema qui sotto lo descriva. Sto solo lavorando con il lato Java delle cose. I messaggi JSON esistono già sulla coda.RabbitMQ - Apache Camel Reading Messaggi cosa fare con i messaggi non riusciti
percorso (Java Il consumo di lato).
@Component
public class SignUpRouting {
errorHandler(deadLetterChannel("rabbitmq://signUpDeadLetter.exchange?username=etc..").useOriginalMessage());
from("rabbitmq://phpSignUp.exchange?username=etc....")
.routeId("signUpRoute")
.processRef("signUpProcessor")
.end();
//....
Il processore ..
@Component
public class SignupProcessor implements Processor {
private ObjectMapper mapper = new ObjectMapper();
@Override
public void process(Exchange exchange) throws Exception {
String json = exchange.getIn().getBody(String.class);
SignUpDto dto = mapper.readValue(json, SignUpDto.class);
SignUp signUp = new SignUp();
signUp.setWhatever(dto.getWhatever());
//etc....
// save record
signUpDao.save(signUp);
}
}
mia domanda è questa .. Cosa devo fare devo fare quando il trasformatore non importare il messaggio.
Diciamo per esempio che c'era un'eccezione DAO. Un campo dati potrebbe essere stato toolong o l'importazione era nel formato errato. Non voglio perdere il messaggio. Mi piacerebbe vedere l'errore e riprovare l'importazione. Ma non vorrei continuare a ritentare il messaggio ogni 30 secondi.
Sto pensando che avrei bisogno di creare un'altra coda .. Una coda di messaggi non funzionanti e riproverò indefinitamente il messaggio ogni 6 ore? .. Vorrei quindi visualizzare i registri vedere l'errore e caricare una correzione e il messaggio sarebbe rielaborato?
Come implementarlo? O sono sulla strada sbagliata?
EDIT ho provato a regolare deadLetterExchange per vedere se sarebbe ottenere le cose nella giusta direzione ... comunque errori e dice coda non può essere non nullo
rabbitmq://phpSignUp.exchange?username=etc...&deadLetterExchange=signUpDeadLetter.exchange
se si utilizza un'altra coda perché non si memorizza il messaggio esatto non riuscito insieme alla traccia dello stack dell'eccezione e quindi si elaborano i dati da quella coda –
non sono sicuro di averlo compreso. potresti fornire un esempio? –
Se si ha il lusso di un team di supporto, invierei il messaggio a un'altra coda o scrivere su una tabella di database e quindi inviare una e-mail per avvisare il personale di supporto. Crea un'altra interfaccia che permetta al personale di supporto di modificare il testo del messaggio e reinserirlo nel processore di registrazione.Qualunque cosa tu faccia richiederà un intervento manuale. Progettare di conseguenza. Ci dovrebbe essere una buona validazione sull'app PHP in modo tale che il suo sia un evento raro. – Sammy