WSO2 API Manager - лучший способ добавить новый шлюз?

В нашей среде у нас работает несколько шлюзов (для каждого клиента, среды и т. Д. В целях безопасности).

На этих шлюзах включен кеш ресурсов в качестве конфигурации по умолчанию (см. Настройка кеширования).

Наша проблема возникает, когда нам нужно добавить новый шлюз (например, нового клиента) и попытаться развернуть уже опубликованный API на новом шлюзе. В этом случае мы делаем следующее:

  • Выделите новую машину со шлюзом (это экземпляры Ubuntu 16.04 в AWS).
  • Остановите API Manager (работает на другом компьютере)
  • Отредактируйте api-manager.xml в этом диспетчере API и добавьте новый шлюз в разделе "Среды".
  • Запустите менеджер API
  • Попробуйте развернуть API в новом шлюзе (мы проверяем новый шлюз только в разделах "Шлюзы" на вкладке "Опубликовать").

Затем мы получаем ошибку, поскольку он пытается воссоздать ранее существующий кеш

TID: [-1234] [] [2018-04-19 16:53:35,698] ERROR {org.wso2.carbon.governance.registry.extensions.aspects.DefaultLifeCycle} -  org.wso2.carbon.registry.core.exceptions.RegistryException: Execution failed for action : Publish Embedded error : FaultGatewaysException:{"PUBLISHED":{"Prototype":"Error while updating API in the gateway. Error while updating API in the gateway. Cache resourceCache already exists","Production":"Error while updating API in the gateway. Error while updating API in the gateway. Cache resourceCache already exists","Sandbox":"Error while updating API in the gateway. Error while updating API in the gateway. Cache resourceCache already exists"},"UNPUBLISHED":{}} {org.wso2.carbon.governance.registry.extensions.aspects.DefaultLifeCycle}

Это наша конфигурация шлюза

<APIGateway>
<!-- The environments to which an API will be published -->
<Environments>
  <!-- Environments can be of different types. Allowed values are 'hybrid', 'production' and 'sandbox'.
             An API deployed on a 'production' type gateway will only support production keys
             An API deployed on a 'sandbox' type gateway will only support sandbox keys
             An API deployed on a 'hybrid' type gateway will support both production and sandbox keys. -->
  <!-- api-console element specifies whether the environment should be listed in API Console or not -->
  <Environment type="production" api-console="true">
    <Name>Prototype</Name>
    <Description>Prototype</Description>
    <ServerURL>https://apisandbox.example.com:9446/services/</ServerURL>
    <GatewayEndpoint>https://apisandbox.example.com:8246</GatewayEndpoint>
    <Username>${admin.username}</Username>
    <Password>${admin.password}</Password>
  </Environment>
  <Environment type="sandbox" api-console="true">
    <Name>Sandbox</Name>
    <Description>Sandbox</Description>
    <ServerURL>https://apisandbox.example.com:9446/services/</ServerURL>
    <GatewayEndpoint>https://apisandbox.example.com:8246</GatewayEndpoint>
    <Username>${admin.username}</Username>
    <Password>${admin.password}</Password>
  </Environment>
  <Environment type="production" api-console="false">
    <Name>Production</Name>
    <Description>Production</Description>
    <ServerURL>https://apigateway.example.com:9447/services/</ServerURL>
    <GatewayEndpoint>https://apigateway.example.com:8247</GatewayEndpoint>
    <Username>${admin.username}</Username>
    <Password>${admin.password}</Password>
  </Environment>
</Environments>

Еще хуже. После этой ошибки естественным действием является снижение до CREATED API и повторная публикация во ВСЕХ шлюзах.

В этом случае мы получаем Exception occurred while trying to invoke service method updateApiFromStringошибка для ранее запущенных шлюзов

Как правильно добавить новый шлюз? И как я могу очистить поврежденный статус?

0 ответов

Добавьте / обновите APILifeCycle в углеродной панели Wso2 (имя хоста:9443/ углеродный URL) с помощью следующего кода. Перейти к расширению → жизненные циклы и отредактировать / добавить APILifeCycle .

<aspect name="APILifeCycle" class="org.wso2.carbon.governance.registry.extensions.aspects.DefaultLifeCycle">
    <configuration type="literal">
        <lifecycle>
            <scxml xmlns="http://www.w3.org/2005/07/scxml"
                   version="1.0"
                   initialstate="Created">
                <state id="Created">
                    <datamodel>
                        <data name="checkItems">
                            <item name="Deprecate old versions after publish the API" forEvent="">
                            </item>
                            <item name="Require re-subscription when publish the API" forEvent="">
                            </item>
                        </data>
                        <data name="transitionExecution">
                            <execution forEvent="Deploy as a Prototype"
                                       class="org.wso2.carbon.apimgt.impl.executors.APIExecutor">
                            </execution>
                            <execution forEvent="Publish"
                                       class="org.wso2.carbon.apimgt.impl.executors.APIExecutor">
                            </execution>
                        </data>
                    </datamodel>
                    <transition event="Publish" target="Published"/>
                    <transition event="Deploy as a Prototype" target="Prototyped"/>
                </state>
                <state id="Prototyped">
                    <datamodel>
                        <data name="checkItems">
                            <item name="Deprecate old versions after publish the API" forEvent="">
                            </item>
                            <item name="Require re-subscription when publish the API" forEvent="">
                            </item>
                        </data>
                        <data name="transitionExecution">
                            <execution forEvent="Publish"
                                       class="org.wso2.carbon.apimgt.impl.executors.APIExecutor">
                            </execution>
                            <execution forEvent="Demote to Created"
                                       class="org.wso2.carbon.apimgt.impl.executors.APIExecutor">
                            </execution>
                        </data>
                    </datamodel>
                    <transition event="Publish" target="Published"/>
                    <transition event="Demote to Created" target="Created"/>
                    <transition event="Deploy as a Prototype" target="Prototyped"/>
                </state>

                <state id="Published">
                    <datamodel>
                        <data name="transitionExecution">
                            <execution forEvent="Block"
                                       class="org.wso2.carbon.apimgt.impl.executors.APIExecutor">
                            </execution>
                            <execution forEvent="Deprecate"
                                       class="org.wso2.carbon.apimgt.impl.executors.APIExecutor">
                            </execution>
                            <execution forEvent="Demote to Created"
                                       class="org.wso2.carbon.apimgt.impl.executors.APIExecutor">
                            </execution>
                            <execution forEvent="Deploy as a Prototype"
                                       class="org.wso2.carbon.apimgt.impl.executors.APIExecutor">
                            </execution>
                        </data>
                    </datamodel>
                    <transition event="Block" target="Blocked"/>
                    <transition event="Deploy as a Prototype" target="Prototyped"/>
                    <transition event="Demote to Created" target="Created"/>
                    <transition event="Deprecate" target="Deprecated"/>
                    <transition event="Publish" target="Published"/>

                </state>
                <state id="Blocked">
                    <datamodel>
                        <data name="transitionExecution">
                            <execution forEvent="Re-Publish"
                                       class="org.wso2.carbon.apimgt.impl.executors.APIExecutor">
                            </execution>
                            <execution forEvent="Deprecate"
                                       class="org.wso2.carbon.apimgt.impl.executors.APIExecutor">
                            </execution>
                        </data>
                    </datamodel>
                    <transition event="Deprecate" target="Deprecated"/>
                    <transition event="Re-Publish" target="Published"/>
                </state>
                <state id="Deprecated">
                    <datamodel>
                        <data name="transitionExecution">
                            <execution forEvent="Retire"
                                       class="org.wso2.carbon.apimgt.impl.executors.APIExecutor">
                            </execution>
                        </data>
                    </datamodel>
                    <transition event="Retire" target="Retired"/>
                </state>
                <state id="Retired">
                </state>
            </scxml>
        </lifecycle>
    </configuration>
</aspect>

Следуйте этому https://docs.wso2.com/display/AM200/Extending+the+API+Life+Cycle

Другие вопросы по тегам