WSO2: Кеширование ключей и ответов - PullRequest
2 голосов
/ 22 сентября 2019

Я новичок в технологии промежуточного программного обеспечения.Я начал с WSO2.Теперь я узнал, что WSO2 имеет функцию кэширования в разных местах.Два из них находятся в разделе «Кеширование ключей» «Ключи» и «Кэширование ответов».

Мой вопрос очень прост (наивен): если мы кешируем неправильный ответ, мы получим ответ снова.Например: я нажал на этот фиктивный запрос API http://dummy.restapiexample.com/api/v1/employees, в котором должен был быть указан список сотрудников, но он дал мне ноль или что-то еще.Теперь этот ответ кэшируется в кэше ответов, что означает, что я буду продолжать получать значение NULL.Что не так.Кэширование имеет смысл, но оно кэширует все ответы, неправильные и правильные.Итак, как с этим справиться, в чем концепция?

Аналогично для Key Manager.Какой смысл кэшировать ключи как на уровне API-шлюза, так и на уровне диспетчера ключей?В любом случае мы должны заново сгенерировать его, если это неправильный ключ или ключ с истекшим сроком действия.

Пожалуйста, ответьте.Мои вопросы звучат наивно, но я ценю, если вы можете объяснить.

1 Ответ

0 голосов
/ 22 сентября 2019

Да, согласен с вами.В идеале кэшируемые ответы должны выбираться на основе кода состояния.Я только что создал запрос на улучшение функции .

Однако, это уже поддерживается во время выполнения, только пользовательский интерфейс пропускает его.

Так что вы можете сделать это, изменив файл конфигурации.

Для этого откройте repository/resources/api_templates/velocity_template.xml и найдите <cache scope="per-host" collector="false".(Примечание collector=false)

Затем добавьте тег <protocol> чуть выше тега <implementation> следующим образом.

<cache scope="per-host" collector="false" hashGenerator="org.wso2.carbon.mediator.cache.digest.REQUESTHASHGenerator" timeout="$!responseCacheTimeOut">
    <protocol type="HTTP">
       <methods>*</methods>
       <headersToExcludeInHash/>
       <responseCodes>2[0-9][0-0]</responseCodes>
       <enableCacheControl>false</enableCacheControl>
       <includeAgeHeader>false</includeAgeHeader>
       <hashGenerator>org.wso2.carbon.mediator.cache.digest.REQUESTHASHGenerator</hashGenerator>
    </protocol>
    <implementation type="memory" maxSize="500"/>
</cache>

Обратите внимание на регулярное выражение для ответов 2xx в responseCodes.Я надеюсь, что это ответит на ваш 1-й вопрос.


Что касается ключевых кешей, то да, есть и кеши на шлюзе и на менеджере ключей.Но по умолчанию включен только кеш шлюза.

<CacheConfigurations>
    <!-- Enable/Disable token caching at the Gateway-->
    <EnableGatewayTokenCache>true</EnableGatewayTokenCache>
    <!-- Enable/Disable API resource caching at the Gateway-->
    <EnableGatewayResourceCache>true</EnableGatewayResourceCache>
    <!-- Enable/Disable API key validation information caching at key-management server -->
    <EnableKeyManagerTokenCache>false</EnableKeyManagerTokenCache>

И есть случаи, когда некоторые хотят отключить кэш шлюза и включить кэш менеджера ключей, например, когда шлюз находится в DMZ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...