Ich benutze Spring 4.2 und spring-amqp 1.5.5 und ich habe meine eigene org.springframework.amqp.support.converter.MessageConverter
implementiert. Dieser Nachrichtenkonverter soll zwischen einem org.springframework.amqp.core.Message
und einem Java-Objekt mappen, indem er eine Eigenschaft betrachtet, die im Nachrichtentext enthalten ist. Aber ich kann keinen Weg finden, diesen Nachrichtenkonverter anzuwenden, um in Verbindung mit der @RabbitListener
Anmerkung verwendet zu werden. Was ich will, ist, etwas zu tun wie folgt aus:Wie kann man einen benutzerdefinierten org.springframework.amqp.support.converter.MessageConverter mit RabbitListener-Annotation verwenden?
@RabbitListener
public void process(MyEvent myEvent) {
..
}
Aber Frühling eine DefaultMessageHandlerMethodFactory
zu verwenden scheint, auf die Sie nur Instanzen von org.springframework.messaging.converter.MessageConverter
zuweisen können, die nicht die gleiche Art von MessageConverter ist, die ich verwende.
Der Grund für die Implementierung meiner eigenen org.springframework.amqp.support.converter.MessageConverter
ist, weil wir Nachrichten von Nicht-Java-Anwendungen generieren, die nicht die magische __TypeId__
Header von Spring verwendet, um die Klasse zu deserialisieren den Körper in.
Ich habe versucht, ein SimpleRabbitListenerContainerFactory
zu definieren:
@Bean
public SimpleRabbitListenerContainerFactory rabbitListenerContainerFactory() {
SimpleRabbitListenerContainerFactory factory = new SimpleRabbitListenerContainerFactory();
factory.setConnectionFactory(rabbitConnectionFactory());
factory.setMessageConverter(messageConverter());
return factory;
}
aber es scheint nicht verwendet zu werden (oder zumindest macht es keinen Unterschied machen).
Also meine Frage ist, wie kann ich meine org.springframework.amqp.support.converter.MessageConverter
anwenden?
Sie haben Recht, es gab eine andere Beandefinition, die es überschrieb (das hatte den gleichen Namen). Als Randnotiz frage ich mich, warum ich mich in meinem Fall nicht über Duplikatdefinitionen beschwert habe. Vielen Dank für den Hinweis! – Johan
Das ist ein normales Spring Framework-Verhalten - es soll so funktionieren, dass eine Anwendung beispielsweise eine Bean-Definition in einem Jar überschreiben kann. –