I am trying to add the following nodes to the Load balancer as below:
LoadbalanceTarget target9000 = LoadbalanceTarget.from("9000", TcpClientTransport.create("localhost",9000));
LoadbalanceTarget target9001 = LoadbalanceTarget.from("9001", TcpClientTransport.create("localhost",9001));
LoadbalanceTarget target9002 = LoadbalanceTarget.from("9002", TcpClientTransport.create("localhost",9002));
ArrayList<LoadbalanceTarget> serverFarm = new ArrayList<>();
serverFarm.add(target9000);
serverFarm.add(target9001);
serverFarm.add(target9002);
Flux<List<LoadbalanceTarget>> producer = Flux.fromIterable(serverFarm).collectList().flux();
RSocketClient rSocketClient =
LoadbalanceRSocketClient.builder(producer).roundRobinLoadbalanceStrategy().build();
While in the process of the application start up, one of the node failed and not available.
Expected Behavior
Load Balancer should gracefully not use the node that is not reachable.
Actual Behavior
Client application fails to start with following exception:
io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: localhost/127.0.0.1:9002
Caused by: java.net.ConnectException: Connection refused
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
at io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:330)
at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:334)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:702)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)
Possible Solution
Loadbalancer should gracefully not send the request to the unavailable node and application should continue to process requests in other nodes.
Your Environment
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependency>
<groupId>io.projectreactor</groupId>
<artifactId>reactor-core</artifactId>
<version>3.4.0</version>
</dependency>
-
RSocket version(s) used: 1.1.0
-
Other relevant libraries versions (eg. netty, ...):
-
Platform (eg. JVM version (javar -version) or Node version (node --version)): Java 8
-
OS and version (eg uname -a): Mac
I am trying to add the following nodes to the Load balancer as below:
While in the process of the application start up, one of the node failed and not available.
Expected Behavior
Load Balancer should gracefully not use the node that is not reachable.
Actual Behavior
Client application fails to start with following exception:
Possible Solution
Loadbalancer should gracefully not send the request to the unavailable node and application should continue to process requests in other nodes.
Your Environment
RSocket version(s) used: 1.1.0
Other relevant libraries versions (eg.
netty, ...):Platform (eg. JVM version (
javar -version) or Node version (node --version)): Java 8OS and version (eg
uname -a): Mac