Dubbo+zookeeper 消費端調用服務端接口時,同一個參數對象報錯:ClassCastException

場景重現:

SpringBoot+Dubbo+zookeeper做分佈式系統demo時遇到的一個問題

zookeeperInteface:接口註冊中心,有實體類UserVo和接口類UserService

zookeeperProvider:服務提供方,有接口實現類UserServiceImpl,其中saveUser(UserVo vo)

zookeeperConsumer:服務消費方,有業務控制類UserController,其中請求方法saveUser

在服務消費方的saveUser請求方法中消費接口saveUser(UserVO vo)時報錯

解決方案:

在服務消費方和服務提供方的pom.xml中註銷springboot的熱加載依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>

原因猜測:

因爲該項目是使用SpringBoot的熱加載處理(spring-boot-devtools),當消費方通過請求處理實體類對象時,在自己的服務容器中創建了對象地址,同時通過註冊中心消費服務提供方的接口實現類,而在服務提供方的服務器容器中是沒有之前消費方提供的參數對象地址的,只能重新創建一個新的參數對象地址,但因爲和消費方的參數對象地址是屬於不同的服務器容器,二者是不能相互轉換的,因此報ClassCastException。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章