我为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