针对第三方API的apache http客户端,使用Netflix OSS和Spring Cloud重试和负载平衡

时间:2018-07-17 13:12:54

标签: spring-cloud netflix-ribbon

我有多个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());
                    }
                }
            });

我想如果发生任何错误,功能区必须重试到相同的提供程序,并针对配置的其他提供程序。

0 个答案:

没有答案