2017-09-18 4 views
0

Ich habe ein seltsames Problem bei der Verwendung spring-cloud-feign in Verbindung HystrixCodaHaleMetricsPublisher und Graphite. Metrics Knoten wurden erstellt, aber keine Daten kamen inHystrixCodaHaleMetricsPublisher funktioniert nicht in Verbindung mit Spring-Cloud-Feign Hystrix

Meine config:.

@Configuration 
@RequiredArgsConstructor 
@EnableConfigurationProperties(ApiGatewayProperties.class) 
@EnableFeignClients 
public class AccountSettingsClientConfig { 
    private final ApiGatewayProperties apiGatewayProperties; 

    @Bean 
    public RequestInterceptor oauth2FeignRequestInterceptor() { 
     return new OAuth2FeignRequestInterceptor(new DefaultOAuth2ClientContext(), resource()); 
    } 

    @Bean 
    public okhttp3.OkHttpClient okHttpClient() { 
     return new OkHttpClient.Builder().hostnameVerifier((s, sslSession) -> true) 
       .build(); 
    } 

    @Bean 
    public AccountSettingsClientFallbackFactory accountSettingsClientFallbackFactory() { 
     return new AccountSettingsClientFallbackFactory(); 
    } 
+0

Wie haben Sie "HystrixCodaHaleMetricsPublisher" registriert? –

+0

Durch 'HystrixPlugins.reset(); HystrixPlugins.getInstance(). RegisterMetricsPublisher (neuer HystrixCodaHaleMetricsPublisher (this.metricRegistry)); ' –

Antwort

1

Schließlich fand ich Lösung für das Problem. Das Problem besteht darin, dass die Standard-SetterFactory von FeignHistrix commandKey mit ungültigen (für Graphit) Zeichen erzeugt, d.h. development.local.AccountSettingsClient.AccountSettingsClient#accountSettings(String).countBadRequests. Ungültige Zeichen in diesem Fall sind # und(). Wenn ein GraphiteReport beginnt, Daten an Graphite zu senden, funktioniert alles und die Daten werden gesendet, aber Graphite kann damit nicht umgehen. So bleiben keine Daten erhalten.

Als Abhilfe registriert ich eine benutzerdefinierte SetterFactory:

@Bean 
public SetterFactory setterFactoryThatGeneratesGraphiteConformCommandKey() { 
    return (target, method) -> { 
     String groupKey = target.name(); 
     //allowed chars for graphite are a-z, A-Z, 0-9, "-", "_", "." and "/". 
     //We don't use default SetterFactory.Default because it generates command key with parenthesis() and # 
     String commandKey = target.type().getSimpleName() + "-" + method.getName(); 
     return HystrixCommand.Setter 
       .withGroupKey(HystrixCommandGroupKey.Factory.asKey(groupKey)) 
       .andCommandKey(HystrixCommandKey.Factory.asKey(commandKey)); 
    }; 
} 

und alles funktioniert jetzt.