i get an odd exception when calling an Rsocket controller using the RSocketRequester on an Apple M1 when using Spring Boot 2.5.x
var requester = RSocketRequester.builder().tcp("localhost", 8181);
var message = requester.route("hello").retrieveMono(String.class).block();
System.out.println("message: " + message);
results in
java.lang.reflect.InvocationTargetException: null
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499) ~[na:na]
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480) ~[na:na]
at io.netty.resolver.dns.DnsServerAddressStreamProviders.<clinit>(DnsServerAddressStreamProviders.java:64) ~[netty-resolver-dns-4.1.69.Final.jar:4.1.69.Final]
at io.netty.resolver.dns.DnsNameResolverBuilder.<init>(DnsNameResolverBuilder.java:60) ~[netty-resolver-dns-4.1.69.Final.jar:4.1.69.Final]
at reactor.netty.transport.NameResolverProvider.newNameResolverGroup(NameResolverProvider.java:455) ~[reactor-netty-core-1.0.12.jar:1.0.12]
at reactor.netty.tcp.TcpResources.getOrCreateDefaultResolver(TcpResources.java:305) ~[reactor-netty-core-1.0.12.jar:1.0.12]
at reactor.netty.tcp.TcpClientConfig.defaultAddressResolverGroup(TcpClientConfig.java:104) ~[reactor-netty-core-1.0.12.jar:1.0.12]
at reactor.netty.transport.ClientTransportConfig.resolverInternal(ClientTransportConfig.java:223) ~[reactor-netty-core-1.0.12.jar:1.0.12]
at reactor.netty.transport.ClientTransport.connect(ClientTransport.java:59) ~[reactor-netty-core-1.0.12.jar:1.0.12]
at reactor.netty.tcp.TcpClient.connect(TcpClient.java:192) ~[reactor-netty-core-1.0.12.jar:1.0.12]
at io.rsocket.transport.netty.client.TcpClientTransport.connect(TcpClientTransport.java:118) ~[rsocket-transport-netty-1.1.1.jar:na]
at io.rsocket.core.RSocketConnector.lambda$null$6(RSocketConnector.java:551) ~[rsocket-core-1.1.1.jar:na]
at reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap(FluxFlatMap.java:152) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.MonoFlatMap.subscribeOrReturn(MonoFlatMap.java:53) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.Mono.subscribe(Mono.java:4384) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap(FluxFlatMap.java:200) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.MonoFlatMap.subscribeOrReturn(MonoFlatMap.java:53) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:57) ~[reactor-core-3.4.11.jar:3.4.11]
at io.rsocket.core.DefaultRSocketClient.doSubscribe(DefaultRSocketClient.java:181) ~[rsocket-core-1.1.1.jar:na]
at io.rsocket.core.ResolvingOperator.add(ResolvingOperator.java:354) ~[rsocket-core-1.1.1.jar:na]
at io.rsocket.core.ResolvingOperator.observe(ResolvingOperator.java:105) ~[rsocket-core-1.1.1.jar:na]
at io.rsocket.core.DefaultRSocketClient$FlatMapMain.onNext(DefaultRSocketClient.java:287) ~[rsocket-core-1.1.1.jar:na]
at io.rsocket.core.DefaultRSocketClient$FlatMapMain.onNext(DefaultRSocketClient.java:199) ~[rsocket-core-1.1.1.jar:na]
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.FluxContextWrite$ContextWriteSubscriber.onNext(FluxContextWrite.java:107) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.FluxMap$MapConditionalSubscriber.onNext(FluxMap.java:220) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1816) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.MonoZip$ZipCoordinator.signal(MonoZip.java:251) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.MonoZip$ZipInner.onNext(MonoZip.java:336) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1816) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.MonoCallable.subscribe(MonoCallable.java:62) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.Mono.subscribe(Mono.java:4399) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.MonoZip.subscribe(MonoZip.java:128) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.4.11.jar:3.4.11]
at io.rsocket.core.DefaultRSocketClient$RSocketClientMonoOperator.subscribe(DefaultRSocketClient.java:515) ~[rsocket-core-1.1.1.jar:na]
at reactor.core.publisher.Mono.subscribe(Mono.java:4399) ~[reactor-core-3.4.11.jar:3.4.11]
at reactor.core.publisher.Mono.block(Mono.java:1705) ~[reactor-core-3.4.11.jar:3.4.11]
at com.example.demo.DemoApplication.lambda$runner$0(DemoApplication.java:25) ~[classes/:na]
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:782) ~[spring-boot-2.5.6.jar:2.5.6]
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:772) ~[spring-boot-2.5.6.jar:2.5.6]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:345) ~[spring-boot-2.5.6.jar:2.5.6]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1343) ~[spring-boot-2.5.6.jar:2.5.6]
at org.springframework.boot.SpringApplication.run(SpringApplication.java:1332) ~[spring-boot-2.5.6.jar:2.5.6]
at com.example.demo.DemoApplication.main(DemoApplication.java:31) ~[classes/:na]
Caused by: java.lang.UnsatisfiedLinkError: 'io.netty.resolver.dns.macos.DnsResolver[] io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider.resolvers()'
at io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider.resolvers(Native Method) ~[netty-resolver-dns-native-macos-4.1.69.Final-osx-x86_64.jar:4.1.69.Final]
at io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider.retrieveCurrentMappings(MacOSDnsServerAddressStreamProvider.java:127) ~[netty-resolver-dns-native-macos-4.1.69.Final-osx-x86_64.jar:4.1.69.Final]
at io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider.<init>(MacOSDnsServerAddressStreamProvider.java:123) ~[netty-resolver-dns-native-macos-4.1.69.Final-osx-x86_64.jar:4.1.69.Final]
... 47 common frames omitted
Comment From: joshlong
Ive got a reproduction of this in https://github.com/joshlong/rsocket-sadness-10-22-2021
Comment From: snicoll
Thanks for the sample @joshlong and sorry this got overlooked. I've reproduced the problem and updating to Spring Boot 2.7.x leads to the message to be received, as I suspect something was fixed in Netty.
2023-11-10 17:10:59.127 ERROR 77060 --- [ main] i.n.r.d.DnsServerAddressStreamProviders : Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider, fallback to system defaults. This may result in incorrect DNS resolutions on MacOS. Check whether you have a dependency on 'io.netty:netty-resolver-dns-native-macos'. Use DEBUG level to see the full stack: java.lang.UnsatisfiedLinkError: failed to load the required native library
message: hello, world!
As you probably know by now, ARM-based CPU needs a specific dependency:
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-resolver-dns-native-macos</artifactId>
<classifier>osx-aarch_64</classifier>
</dependency>
Adding that makes that error message to go away.