我想和春天的兔子听众一起听兔子排队的消息。我的课看起来很基础,像这样:
组件
公共类mailmessagerabitlistener{
私人邮件存储库邮件存储库;
私人邮件服务;
@自动售货机
公用mailmessagerabbitlistener(mailrepository mailrepository,mailservice mailservice){
this.mailrepository=mailrepository;
this.mailservice=邮件服务;
}
@豆
public messageconverter messageconverter()。{
返回新jackson2jsonMessageConverter();
}
@rabbitListener(queues=“msmail.queue”)。
public void receivemailmessage(jsonmailmessage jsonmailmessage)引发异常{
system.out.println(jsonmailmessage);
}
}
< /代码>
我的映射类jsonmailmessage如下所示:
数据
@无argsconstructor
@所需argsconstructor
公共类jsonmailmessage{
@非空
私有字符串usertoken;
@非空
私有字符串sendto;
@非空
私有字符串主题;
@非空
私有字符串内容;
@非空
私有字符串[]文件;
}
< /代码>
现在我可以成功地监听一个队列,问题是当我在Rabbit队列中发送这样的消息时:
JSON数组中填充了base64编码的文件,这些文件应该是基本的字符串表达式,因此jackson2jsonMessageConverter应该能够转换这些文件。
但是我得到了这种例外:
bean[-------messaging.mailmessagerabbitlistener@35ff072c]
在Org.Spring Frask.AMQP.List.Addia.MasaGeMasigelistNealAdvult.NojKeDebug处理程序(Masiging MasigelistNealAdvult.java:185)~[Spring Rabtu-2.0.3.Pravor.jar:2.0.3.发布版]
在Org.Spring Frask.AMQP.List.Addia.MasaGeMasigelistNeldAdvult.OnMead(Masiging MasigelistNealAdvult.java:120)~[Spring Rabtu-2.0.3.Pravor.jar:2.0.3.发布版]
在Org.Spring Frask.AMQP.MistaGeleListEngultCult.DoNoWoKeListNeX(ActudioMasigelistEngultPort.java:1414)~[Spring Rabtu-2.0.3.Pravor.jar:2.0.3.发布版]
在Org.Spring Frask.AMQP.MistaGeleListEngultCortual.StudialVooKeListNeX(ActudioMasgelistEngultPort.java:1337)~[Spring Rabtu-2.0.3.Pravor.jar:2.0.3.发布版]
在Org.Spring Frask.AMQP.MistaGeleListEngultPort.IvoKeListNeX(ActudioMasigelistEngultPort.java:1324)~[Spring Rabtu-2.0.3.Pravor.jar:2.0.3.发布版]
在Org.Spring Frask.AMQP.MistaGeleListEngult.CuultUpLististor(ActudioMasigelistEngultPort.java:1303)~[Spring Rabtu-2.0.3.Pravor.jar:2.0.3.发布版]
在Org.Spring Frask.AMQP.List.SistimeEaseListEngultBaseDoreCeVeNeXECUTE(SimeMaseGelistEngultPort.java:785)[Spring Rabtudi-2.0.3.Prave.jar:2.0.3.发布版]
在Org.Spring Frask.AMQP.List.SistimeEaseListNealPort.Access and AdExcEutt(SimeMaseGelistEngultPort.java:769)[Spring Rabtudi-2.0.3.Prave.jar:2.0.3.发布版]
在Org.Spring Frask.AMQP.List.Histelist.SimulMeSigelistEngult.Access 700美元(SimuleSigelEistNealPort.java:77)[Spring Rabtudi-2.0.3.Relp.jar:2.0.3.发布版]
在Org.Spring Frask.AMQP.List.SimuleMeAgEistReleNaveCase$AssiCaseMealPractualAudio.Run(SimeMeaseGelistEngult.java:1010)[Spring Rabtudi-2.0.3.Pravor.jar:2.0.3.发布版]
在Java.Lang.Trime.Run(线程.java:748)[Na:1.80Y171]
由以下原因引起:org.springframework.messaging.converter.messageconversionexception:无法将genericmessage[有效载荷=字节[118],headers=amqp_ReceivedDeliveryMode=非持久,amqp_ReceivedRoutingKey=msmail.queue,amqp_DeliveryTag=1,amqp_ConsumerQueue=msmail.queue,amqp_Redelivered=false,id=b997e8c从[b]转换为[dto.jsonmailmessage]B-3424-DF90-5370-AA4CF79175BE,AMQP_ConsumerTag=AMQ.CTAG-LL9Y6R67FJC6Dychaiwqra,Content Type=Application/JSON,Timestamp=1538554985476]
在Org.Spring Frask.Engors.Held.Actudi.Suff.PayLoad GrimeUnjortServer . DealVielGuePort(PayLoad GracuMeTunver,Java:144)~[ Spring MeasAgEng5.0.5.Selp.jar:5.0.5.版本号]
在Org.Spring框架中。消息处理程序。调用。
在Org.Spring Frask.Engors.Huffor.Cuaso.VoCababl HooLeRead .GETMultAgMultEngValts(VoCabable HooLeRead方法.java:137)~[Spring MeasAgEng5.0.5.Sprel.jar:5.0.5.发布版]
在Org.Spring Frask.Engors.Huffor.Cuaso.VoCabable HooLeReal.PoCKE(VoCabable HooLeRead方法.java:109)~[Spring MeasAgEng5.0.5.Sprel.jar:5.0.5.发布版]
在Org.Spring Frask.AMQP.List.List.Advult.Hell适配器Adv.KooKE(HANDLRealAdvult.Java:51)~[Spring Rabtu-2.0.3.Pravor.jar:2.0.3.发布版]
在Org.Spring Frask.AMQP.List.Addia.MasaGeMasigelistNealAdvult.NojKeDebug处理程序(Masiging MasigelistNealAdvult.java:182)~[Spring Rabtu-2.0.3.Pravor.jar:2.0.3.发布版]
…省略10个常用框架
< /代码>
更新
<>它正在工作,消息被转换成Java对象。当我想直接从listener方法返回对象时,问题就开始了。
@rabbitlistener(queues=“msmail.queue”)。
公共jsonmailmessage receivemailmessage(jsonmailmessage jsonmailmessage){
返回jsonmailmessage;
}
< /代码>
它引发不同的异常:
caused by:org.springframework.amqp.amqpException:cannot determine reply to message property value:request message does not contain reply to property,and no default response exchange was set.
在Org.Spring Frask.AMQP.ListAdv.AddiabdTabelEaseEistister-GETRealytoToIP(AdExabdTabelEaseListist.java:398)~[Spring Rabtu-2.0.3.Pravor.jar:2.0.3.发布版]
在Org.Spring Frask.AMQP.ListAdv.AddiabdTabelEaseListist.HuffLeReSurt(Advestabl Agelistist.java:307)~[Spring Rabtudi-2.0.3.Prave.jar:2.0.3.发布版]
…省略10个常用帧
< /代码> <
我的映射类jsonmailmessage如下所示:
@Data
@NoArgsConstructor
@RequiredArgsConstructor
public class JsonMailMessage {
@NonNull
private String userToken;
@NonNull
private String sendTo;
@NonNull
private String subject;
@NonNull
private String content;
@NonNull
private String[] files;
}
现在我可以成功地监听一个队列,问题是当我在Rabbit队列中发送这样的消息时:

JSON数组中填充了base64编码的文件,这些文件应该是基本的字符串表达式,因此jackson2jsonMessageConverter应该能够转换这些文件。
但是我得到了这种例外:
Bean [---------messaging.MailMessageRabbitListener@35ff072c]
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:185) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.onMessage(MessagingMessageListenerAdapter.java:120) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.doInvokeListener(AbstractMessageListenerContainer.java:1414) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.actualInvokeListener(AbstractMessageListenerContainer.java:1337) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.invokeListener(AbstractMessageListenerContainer.java:1324) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.listener.AbstractMessageListenerContainer.executeListener(AbstractMessageListenerContainer.java:1303) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.doReceiveAndExecute(SimpleMessageListenerContainer.java:785) [spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.receiveAndExecute(SimpleMessageListenerContainer.java:769) [spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer.access$700(SimpleMessageListenerContainer.java:77) [spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer$AsyncMessageProcessingConsumer.run(SimpleMessageListenerContainer.java:1010) [spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_171]
Caused by: org.springframework.messaging.converter.MessageConversionException: Cannot convert from [[B] to [-----dto.JsonMailMessage] for GenericMessage [payload=byte[118], headers={amqp_receivedDeliveryMode=NON_PERSISTENT, amqp_receivedRoutingKey=msmail.queue, amqp_deliveryTag=1, amqp_consumerQueue=msmail.queue, amqp_redelivered=false, id=b997e8cb-3424-df90-5370-aa4cf79175be, amqp_consumerTag=amq.ctag-lL9Y6R67fJc6DyCHAiWQRA, Content-Type=application/json, timestamp=1538554985476}]
at org.springframework.messaging.handler.annotation.support.PayloadArgumentResolver.resolveArgument(PayloadArgumentResolver.java:144) ~[spring-messaging-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:116) ~[spring-messaging-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:137) ~[spring-messaging-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.messaging.handler.invocation.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:109) ~[spring-messaging-5.0.5.RELEASE.jar:5.0.5.RELEASE]
at org.springframework.amqp.rabbit.listener.adapter.HandlerAdapter.invoke(HandlerAdapter.java:51) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.listener.adapter.MessagingMessageListenerAdapter.invokeHandler(MessagingMessageListenerAdapter.java:182) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
... 10 common frames omitted
更新
它正在工作,消息被转换成Java对象。当我想直接从listener方法返回对象时,问题就开始了。
@RabbitListener(queues = "msmail.queue")
public JsonMailMessage receiveMailMessage(JsonMailMessage jsonMailMessage){
return jsonMailMessage;
}
它抛出不同的异常:
Caused by: org.springframework.amqp.AmqpException: Cannot determine ReplyTo message property value: Request message does not contain reply-to property, and no default response Exchange was set.
at org.springframework.amqp.rabbit.listener.adapter.AbstractAdaptableMessageListener.getReplyToAddress(AbstractAdaptableMessageListener.java:398) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
at org.springframework.amqp.rabbit.listener.adapter.AbstractAdaptableMessageListener.handleResult(AbstractAdaptableMessageListener.java:307) ~[spring-rabbit-2.0.3.RELEASE.jar:2.0.3.RELEASE]
... 10 common frames omitte