关于重构后的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回答

大目

2019-08-10

您好,我不是太明白您的问题…主要是搞清楚问题复现的场景,以及时序。
您那样修改也是OK的,原代码是利用spring自带的消息反序列化,把json消息转成对象。
您修改后是自己实现反序列化,都是可以的。

0
1
沁尘
非常感谢!
2019-08-10
共1条回复

L灬Lawliet

2019-08-16

这样也可以 用户中心也不会有错误提示了
@StreamListener(Sink.INPUT)
public void receive(Message<UserAddBonusMsgDTO> message) {
    this.userService.addBonus(message.getPayload());
}


2
2
qq_邪饿的小强_0
nice
2020-06-24
共2条回复

L灬Lawliet

2019-08-16

boot 与 cloud的版本看看一不一致

0
0

Spring Cloud Alibaba微服务从入门到进阶

面向未来微服务:熟练掌握Spring Cloud Alibaba

3084 学习 · 1324 问题

查看课程