application.yml
ribbon:
#连接超时时间(ms)
ConnectTimeout: 1000
#业务逻辑超时时间(ms)
ReadTimeout: 2000
#同一台实例最大重试次数,不包括首次调用
MaxAutoRetries: 3
#重试负载均衡其他的实例最大重试次数,不包括首次调用
MaxAutoRetriesNextServer: 3
#是否所有操作都重试
ribbon.OkToRetryOnAllOperations: false
使用ribbon重试机制,请求失败后,每个6秒会重新尝试
provider
参考前面的教程,创建2个 provider 项目
provider1、端口 8091
import com.quintin.userapi.UserApi;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.util.Collections;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
@RestController
public class UserController implements UserApi {
@Value("${server.port}")
String port;
private AtomicInteger count = new AtomicInteger();
@Override
public String alive(){
System.out.println("alive");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
int i = count.getAndIncrement();
System.out.println("port:"+ port + "、弟 " + i + " 次调用");
return "port : " + port;
}
}
provider2、端口 8092
import com.quintin.userapi.UserApi;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.util.Collections;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
@RestController
public class UserController implements UserApi {
@Value("${server.port}")
String port;
private AtomicInteger count = new AtomicInteger();
@Override
public String alive(){
System.out.println("alive");
try {
Thread.sleep(300);
} catch (InterruptedException e) {
e.printStackTrace();
}
int i = count.getAndIncrement();
System.out.println("port:"+ port + "、弟 " + i + " 次调用");
return "port : " + port;
}
}
控制台
provider1、端口 8091
alive
alive
port:8091、弟 15 次调用
alive
port:8091、弟 16 次调用
alive
port:8091、弟 17 次调用
port:8091、弟 18 次调用
provider2、端口 8092
alive
port:8092、弟 24 次调用