我有多个SMS /电子邮件服务提供商。我要应用负载平衡,为同一提供者重试,为另一提供者重试,跌落和断路器。
我尝试使用Spring-cloud-netfix-ribbon,但直接使用LoadBalancerClient重试,因为我必须为每个提供程序以不同的方式重构http请求对象。我正在使用apache http客户端进行http请求。就我而言,负载均衡器工作正常,但我无法为apache http客户端配置重试。
我在类路径上添加了spring-retry。一些基本配置:
spring.cloud.loadbalancer.retry.enabled=true
sms-service.ribbon.MaxAutoRetries=2
sms-service.ribbon.MaxAutoRetriesNextServer=1
sms-service.ribbon.ReadTimeout=1000
sms-service.ribbon.OkToRetryOnAllOperations=true
sms-service.ribbon.listOfServers=netcore,acl
loadBalancerClient.execute(serviceId, new LoadBalancerRequest<NotificationStatus>(){
@Override
public NotificationStatus apply(ServiceInstance instance) throws Exception {
logger.info("sms service provider: " + instance.getHost());
AbstractSmsService smsService = applicationContext.getBean(instance.getHost(), AbstractSmsService.class);
if (smsDto.getSmsType() == SmsType.OTP) {
return smsService.sendOtp(smsDto.getMobile(), smsDto.getCountryCode(), smsDto.getText());
} else {
return smsService.sendText(smsDto.getMobile(), smsDto.getCountryCode(), smsDto.getText());
}
}
});
我想如果发生任何错误,功能区必须重试到相同的提供程序,并针对配置的其他提供程序。