Documentación de la interfaz Http de Apollo-Server

Documentación de la interfaz Http de Apollo-Server

https://ctripcorp.github.io/apollo/#/zh/usage/other-language-client-user-guide

ConfigFileController Http interfaz con caché para leer la configuración de Apollo

La interfaz obtendrá la configuración de la caché, que es adecuada para solicitudes de extracción de configuración de alta frecuencia, como una configuración de sondeo simple cada 30 segundos

// 使用 Guava 对配置信息进行缓存
private Cache<String, String> localCache;

localCache = CacheBuilder.newBuilder()
    .expireAfterWrite(EXPIRE_AFTER_WRITE, TimeUnit.MINUTES)
    .weigher((Weigher<String, String>) (key, value) -> value == null ? 0 : value.length())
    .maximumWeight(MAX_CACHE_SIZE)
    .removalListener(notification -> {
    
    
        String cacheKey = notification.getKey();
        logger.debug("removing cache key: {}", cacheKey);
        if (!cacheKey2WatchedKeys.containsKey(cacheKey)) {
    
    
        return;
        }
        //create a new list to avoid ConcurrentModificationException
        List<String> watchedKeys = new ArrayList<>(cacheKey2WatchedKeys.get(cacheKey));
        for (String watchedKey : watchedKeys) {
    
    
        watchedKeys2CacheKey.remove(watchedKey, cacheKey);
        }
        cacheKey2WatchedKeys.removeAll(cacheKey);
        logger.debug("removed cache key: {}", cacheKey);
    })
    .build();

// outputFormat 默认 properties
String cacheKey = assembleCacheKey(outputFormat, appId, clusterName, namespace, dataCenter);
String result = localCache.getIfPresent(cacheKey);
  • El parámetro ip = {clientIp} es opcional y se utiliza para lograr la publicación en escala de grises.

com.ctrip.framework.apollo.configservice.controller.ConfigFileController

URL: {
    
    config_server_url}/configfiles/json/{
    
    appId}/{
    
    clusterName}/{
    
    namespaceName}?ip={
    
    clientIp}   
 
Method: GET

// Http Response 返回结果
{
    
    
    "portal.elastic.document.type":"biz",
    "portal.elastic.cluster.name":"hermes-es-fws"
}

La interfaz ConfigController Http sin caché lee la configuración de Apollo

La interfaz obtendrá la configuración directamente de la base de datos, que se puede utilizar con notificaciones push de configuración para actualizar la configuración en tiempo real

  • releaseKey = {releaseKey}: Simplemente pase la releaseKey en el último objeto devuelto, que se utiliza para comparar las versiones con el servidor. Si la versión no cambia, el servidor devolverá directamente 304 para ahorrar tráfico y cálculos.

  • El parámetro ip = {clientIp} es opcional y se utiliza para lograr la publicación en escala de grises.

com.ctrip.framework.apollo.configservice.controller.ConfigController

URL: {
    
    config_server_url}/configs/{
    
    appId}/{
    
    clusterName}/{
    
    namespaceName}?releaseKey={
    
    releaseKey}&ip={
    
    clientIp}  

Method: GET

// Http Response 返回结果
{
    
    
  "appId": "100004458",
  "cluster": "default",
  "namespaceName": "application",
  "configurations": {
    
    
    "portal.elastic.document.type":"biz",
    "portal.elastic.cluster.name":"hermes-es-fws"
  },
  "releaseKey": "20170430092936-dee2d58e74515ff3"
}

Actualización de la configuración consciente de la aplicación NotificationControllerV2

Apollo proporciona notificaciones push para actualizaciones de configuración basadas en sondeos largos Http. Los clientes de terceros pueden decidir si necesitan utilizar esta función de acuerdo con sus necesidades reales.

com.ctrip.framework.apollo.configservice.controller.NotificationControllerV2

URL: {
    
    config_server_url}/notifications/v2?appId={
    
    appId}&cluster={
    
    clusterName}&notifications={
    
    notifications}  

Method: GET  

// Http Response 返回结果
[
  {
    
    
    "namespaceName": "application",
    "notificationId": 101
  }
]

// 如果返回的HttpStatus是304,说明配置没有变化
// 如果返回的HttpStauts是200,说明配置有变化,针对变化的namespace重新去服务端拉取配置

Supongo que te gusta

Origin blog.csdn.net/lewee0215/article/details/112971490
Recomendado
Clasificación