关于重构后的receive()方法参数类型问题
来源:9-24 Spring Cloud Stream + RocketMQ实现分布式事务02-重构消费者

沁尘
2019-08-10
由于在前一小节重构了内容中心,最后提交出去的是一段JSON字符串。在审批了一篇分享后,内容中心这边消费了这次消息,报了一个异常错误,nested exception is java.lang.IllegalStateException: argument type mismatch,但是积分添加都正常执行了。为了干掉这个错误提示,我把内容中心的receive方法改成如下:
// 原来的代码
// public void receive(UserAddBonusMsgDTO message) {
// this.userService.addBonus(message);
// }
// 修改后
public void receive(String message) {
UserAddBonusMsgDto userAddBonusMsgDto = JSON.parseObject(message, UserAddBonusMsgDto.class);
this.userService.addBonus(userAddBonusMsgDto);
}
改成这样子后,错误提示就不再出现了。按目前我的理解是这里在修改代码前已经不会添加积分才对,麻烦老师指点其中玄妙之处。
写回答
3回答
-
您好,我不是太明白您的问题…主要是搞清楚问题复现的场景,以及时序。
您那样修改也是OK的,原代码是利用spring自带的消息反序列化,把json消息转成对象。
您修改后是自己实现反序列化,都是可以的。012019-08-10 -
L灬Lawliet
2019-08-16
这样也可以 用户中心也不会有错误提示了 @StreamListener(Sink.INPUT) public void receive(Message<UserAddBonusMsgDTO> message) { this.userService.addBonus(message.getPayload()); }
222020-06-24 -
L灬Lawliet
2019-08-16
boot 与 cloud的版本看看一不一致
00
相似问题