Ich schreibe Integrationstests für meine Anwendung, die Nachrichten an RabbitMq sendet. Als Teil meiner Testkonfiguration erkläre ich einige RabbitListeners, diese Nachrichten zu erhalten.Nicht in der Lage, Resolver für meine eingehende RabbitMq-Nachricht zu konfigurieren
Ich weiß, ich bin nicht zu weit weg, denn diese Arbeit ist:
@RabbitListener(bindings = @QueueBinding(
value = @Queue(
value = "myQueue",
autoDelete = "true",
exclusive = "false",
durable = "false"),
exchange = @Exchange(
value = "myExchange",
autoDelete = "true",
durable = "true"),
key = "myRoutingKey"))
public void confirmEligibilityMessage(Object eligibilityEvent) {
log.info("received message [{}]", eligibilityEvent);
receivedMessages.add(eligibilityEvent);
}
-> Nachricht
jedoch empfangen wird, würde ich die Nachricht gerne direkt auf den erwarteten umgewandelt werden Art, so zu modifizieren ich die Unterschrift des Verfahrens durch die Art der Nutzlast Zugabe:
public void confirmConsolidationEligibilityMessage(@Payload EligibilityEvent eligibilityEvent)
und ich bin immer dieses Problem: „Kein Konverter gefunden zu konvertieren ..“
Caused by: org.springframework.amqp.support.converter.MessageConversionException: Cannot handle message
... 13 common frames omitted
Caused by: org.springframework.messaging.converter.MessageConversionException: No converter found to convert to class messaging.outgoing.EligibilityEvent, message=GenericMessage [payload={"requestCode":"someRequestCode","isEligible":false}, headers=...
Ich habe versucht, was here vorgeschlagen und machte meine GlobalEventBusListener RabbitListenerConfigurer wie folgt implementieren:
public class GlobalEventBusListener implements RabbitListenerConfigurer {
private final List<Object> receivedMessages = new ArrayList<>();
@Override
public void configureRabbitListeners(RabbitListenerEndpointRegistrar registrar) {
registrar.setMessageHandlerMethodFactory(myHandlerMethodFactory());
}
@Bean
public MessageConverter jackson2Converter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
return converter;
}
@Bean
public DefaultMessageHandlerMethodFactory myHandlerMethodFactory() {
DefaultMessageHandlerMethodFactory factory = new DefaultMessageHandlerMethodFactory();
factory.setMessageConverter(jackson2Converter());
return factory;
}
Aber ich habe Probleme immer noch da Konvertierung nicht richtig passieren - Nachricht allerdings ist anders ..
Caused by: java.lang.IllegalStateException: No suitable resolver for argument [0] [type=messaging.outgoing.EligibilityEvent]
HandlerMethod details:
Controller [mocks.GlobalEventBusListener]
Method [public void mocks.GlobalEventBusListener.confirmEligibilityMessage(messaging.outgoing.EligibilityEvent)]
Irgendeine Idee von dem, was ich versuchen könnte? Ich bin mir nicht sicher, wie ich weiter untersuchen soll. Soll ich alle von Spring Boot instanziierten Beans protokollieren und von hier aus starten? welche Art von Bohnen sollte hier sein, damit es funktioniert? Mit Frühling Boot „Magie“, dachte ich zunächst, dass einfach wie unten in meinem Zusammenhang eine MessageConverter mit würde den Trick zu tun, aber es sieht aus wie es nicht der Fall ist:
@Bean
public MessageConverter jackson2Converter() {
MappingJackson2MessageConverter converter = new MappingJackson2MessageConverter();
return converter;
}
Dank !!
Vielen Dank Gary, ich diesen Teil des Dokuments übersehen hatte. Ich konzentrierte mich auf den Empfängerteil, aber ich schickte die Nachricht nicht richtig: Ich schickte es als String, so dass der Inhaltstyp in den Headern nicht richtig auf Json eingestellt war. –