阿里巴巴 Rsocket - MonoContextWrite 无法转换为 java.lang.Integer 类

Posted

技术标签:

【中文标题】阿里巴巴 Rsocket - MonoContextWrite 无法转换为 java.lang.Integer 类【英文标题】:Alibaba Rsocket - MonoContextWrite cannot be cast to class java.lang.Integer 【发布时间】:2021-12-18 14:04:15 【问题描述】:

我用的是阿里巴巴的 Rsocket。我有带代码的代理服务:

public interface ExampleService 
    Mono<String> getMessage();

和实施:

@RSocketService(serviceInterface = ExampleService.class, encoding = "json")
@Service
@RequiredArgsConstructor
public class ExampleServiceImpl implements ExampleService 

    @Override
    public Mono<String> getMessage() 
        return Mono.just(response);
    

和客户服务(其他spring app):

public interface ExampleService 
        Mono<String> getMessage();


@Configuration
public class RSocketConfig 

    @Bean
    public ExampleService exampleService(@Autowired UpstreamManager upstreamManager) 
        return RSocketRemoteServiceBuilder
                .client(ExampleService.class)
                .service("com.example.rsocket.ExampleService")
                .upstreamManager(upstreamManager)
                .acceptEncodingType(RSocketMimeType.Json)
                .build();
    

当我在 Controller 中注入 ExampleService 的 Bean 并使用 getMessage() 方法时,我得到了异常:

Caused by: java.lang.ClassCastException: class reactor.core.publisher.MonoContextWrite cannot be cast to class java.lang.Integer (reactor.core.publisher.MonoContextWrite is in unnamed module of loader 'app'; java.lang.Integer is in module java.base of loader 'bootstrap') 

什么原因?

【问题讨论】:

【参考方案1】:

是的,这是由忽略 hashCode、equals、toString 方法的 InvocationHandler 引起的错误。

在代理实例上的 java.lang.Object 中声明的 hashCode、equals 或 toString 方法的调用将被编码并分派到调用处理程序的调用方法,其方式与接口方法调用的编码和分派方式相同,如如上所述。传递给调用的 Method 对象的声明类将是 java.lang.Object。从 java.lang.Object 继承的代理实例的其他公共方法不会被代理类覆盖,因此这些方法的调用行为与它们对 java.lang.Object 实例的行为类似。

1.1.2版本已修复,请参考 https://github.com/alibaba/alibaba-rsocket-broker/issues/174了解详情。

【讨论】:

以上是关于阿里巴巴 Rsocket - MonoContextWrite 无法转换为 java.lang.Integer 类的主要内容,如果未能解决你的问题,请参考以下文章

阿里巴巴 Rsocket - MonoContextWrite 无法转换为 java.lang.Integer 类

NetfiFacebook阿里等公司共同力推“响应式编程”技术:Rsocket

浅谈RSocket与响应式编程

Spring RSocket:基于服务注册发现的 RSocket 负载均衡

云原生实践之 RSocket 从入门到落地:Servlet vs RSocket

云原生实践之 RSocket 从入门到落地:Servlet vs RSocket