我正在使用rsocket-java。
有没有办法通过元数据发送自定义对象?
我在他们的文档中看到了这个代码示例。
RSocketStrategies strategies = RSocketStrategies.builder()
.metadataExtractorRegistry(registry -> {
registry.metadataToExtract(fooMimeType, Foo.class, "foo");
// ...
})
.build();
return strategies;我也尝试过类似的方法。
@Bean
public RSocketStrategies strategies(){
RSocketStrategies strategies = RSocketStrategies.builder()
.metadataExtractorRegistry(registry -> {
registry.metadataToExtract(someMimeType, Something.class, "something");
// ...
})
.build();
return strategies;
}但是得到了这个例外。
Caused by: java.lang.IllegalArgumentException: No decoder for messaging/x.something and com.demo.Something
我应该为每种对象类型创建自己的解码器吗?
请不要显示字符串示例。问题是如何传递自定义对象。
发布于 2021-03-06 21:15:33
您应该在某个地方注册此bean,请参见https://docs.spring.io/spring-integration/docs/current/reference/html/rsocket.html
@Bean
public RSocketStrategies rsocketStrategies() {
return RSocketStrategies.builder()
.decoder(StringDecoder.textPlainOnly())
.encoder(CharSequenceEncoder.allMimeTypes())
.dataBufferFactory(new DefaultDataBufferFactory(true))
.build();
}
@Bean
public ServerRSocketConnector serverRSocketConnector() {
ServerRSocketConnector serverRSocketConnector = new ServerRSocketConnector("localhost", 0);
serverRSocketConnector.setRSocketStrategies(rsocketStrategies());
serverRSocketConnector.setMetadataMimeType(new MimeType("message", "x.rsocket.routing.v0"));
serverRSocketConnector.setServerConfigurer((server) -> server.payloadDecoder(PayloadDecoder.ZERO_COPY));
serverRSocketConnector.setClientRSocketKeyStrategy((headers, data) -> ""
+ headers.get(DestinationPatternsMessageCondition.LOOKUP_DESTINATION_HEADER));
return serverRSocketConnector;
}但是,仅仅使用您提供的最小代码片段是不可能回答的。你能在你的例子中提供一个可运行的例子或更多的上下文吗?
https://stackoverflow.com/questions/66501888
复制相似问题