我为microservice landscape配置了Spring Cloud发现,因此我能够仅使用其ID访问其他服务实例:

public class MyClass {

    @Autowired
    @LoadBalanced
    private RestTemplate restTemplate;

    public String doOtherStuff() {
        String results = restTemplate.getForObject("http://stores/stores", String.class);
        return results;
    }
}


现在,我想访问需要OAuth2授权的服务。我使用Keycloak服务器来提供它,并且Keycloak已经提供了带有特定KeycloakRestTemplate的适配器。无论如何,如何使用load balancing增强它?

最佳答案

我们需要创建一个特定的KeycloakRestTemplate,它将使用LoadBalancerInterceptor

@Configuration
@EnableWebSecurity
@ComponentScan(basePackageClasses = KeycloakSecurityComponents.class)
public class SecurityConfig extends KeycloakWebSecurityConfigurerAdapter {

    @Bean
    @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
    @LoadBalanced
    public KeycloakRestTemplate keycloakRestTemplate(
            KeycloakClientRequestFactory keycloakClientRequestFactory,
            LoadBalancerInterceptor interceptor) {
        KeycloakRestTemplate result = new KeycloakRestTemplate(
            keycloakClientRequestFactory);
        // Add the interceptor for load balancing
        result.getInterceptors().add(interceptor);
        return result;
    }

    //More configurations for keycloak

}


因此,有机会获得一个Authorized / LoadBalanced模板:

@Autowired
@LoadBalanced
protected KeycloakRestTemplate restTemplate;


也可以看看:


Add Ribbon load balancing to a vanilla RestTemplate

10-01 21:47