L'exécution de Lapin auditeur de message a échoué, et aucun ErrorHandler a été défini. Impossible d'appeler la cible de la méthode avec l'argument type = [classe [B],
Je suis à l'aide de printemps amqp rabbitmq, et l'envoi de messages à l'aide de
Message message = MessageBuilder
.withBody(item.toString().getBytes())
.setReplyTo("importReply")
.setCorrelationId(item.toString().getBytes()).build();
Mon gestionnaire de message est
public class Foundation {
public Message importExchange(Message exchange) {
System.out.println("Command:" + exchange.getBody());
Message message = MessageBuilder
.withBody(exchange.getBody().toString().getBytes()).setCorrelationId(exchange.getMessageProperties().getCorrelationId() .toString().getBytes()).build();
return message;
}
}
J'ai accroché à l'aide de
<rabbit:listener-container
connection-factory="rabbitConnectionFactory" concurrency="10">
<rabbit:listener queues="${rabbitmq.import.queue}"
ref="foundation" method="importExchange" />
<rabbit:listener queues="${rabbitmq.import.reply.queue}"
ref="importExchangeItemWriter" method="replyHandler" />
</rabbit:listener-container>
Mais je suis en dessous de execption
Execution of Rabbit message listener failed, and no ErrorHandler has been set.
org.springframework.amqp.rabbit.listener.ListenerExecutionFailedException: Failed to invoke target method 'importExchange' with argument type = [class [B], value = [{[B@427829d8}]
at org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter.invokeListenerMethod(MessageListenerAdapter.java:483)
at org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter.onMessage(MessageListenerAdapter.java:374)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:647)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:573)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$001(SimpleMessageListenerContainer.java:75)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$1.invokeListener(SimpleMessageListenerContainer.java:154)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.invokeListener(SimpleMessageListenerContainer.java:1111)
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:556)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:904)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:888)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$500(SimpleMessageListenerContainer.java:75)
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:989)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.NoSuchMethodException: com.stockopedia.symfony.Foundation.importExchange([B)
at java.lang.Class.getMethod(Class.java:1665)
at org.springframework.util.MethodInvoker.prepare(MethodInvoker.java:178)
at org.springframework.amqp.rabbit.listener.adapter.MessageListenerAdapter.invokeListenerMethod(MessageListenerAdapter.java:466)
... 12 more
et le même problème est également producteur de côté replyHandler
public void replyHandler(Message message) {
System.out.println("In Reply Handler:" + message.getMessageProperties().getCorrelationId());
}
Aussi, comment puis-je obtenir exception dans replyHandler si il n'y a aucune exception dans importExchange ?
OriginalL'auteur vishal | 2014-04-23
Vous devez vous connecter pour publier un commentaire.
Puisque vous êtes à l'aide de POJO pour le message d'écoute, vous ne pouvez pas obtenir de gérer les messages.
Votre
Foundation#importExchange
doit accepter le corps du message (dans votre casbyte[]
)et en retour quelque chose d'approprié pour être pour la réponse du corps du message.
La
replyHandler
a juste à mettre en œuvreMessageListener
.Le Cadre fera pour vous la corrélation des trucs.
Oui, j'ai vu. Juste essayer de suivre mes conseils
Je veux faire de corrélation que le cas d'utilisation est, je veux envoyer tous les messages de façon asynchrone, sans attendre de réponse, et puis attendre pour les réponses. Je voudrais que mon replyHandler déclencher avec des messages de réponse, je devrais savoir pour qui message que j'ai reçu de réponse.
Vous faites tout corriger avec de la corrélation et de réponses. L'enjeu ici est autour de Pojo. Juste faire
replyHandler
commeMessageListener
et vous recevrez des messages de réponse correctement. Mais votreimportExchange
ne devrait pas obtenir traiter avecMessage
objets.Génial !!! Il est de travail. Merci beaucoup !
OriginalL'auteur Artem Bilan
Ou vous pouvez ajouter
.setContentType="text/plain"
et le convertisseur est en mesure de convertir en Chaîne pour vous.OriginalL'auteur Gary Russell