2017-10-19 46 views
0

失败后,我们已经设置的WSO2-AM:在商店的API调用重启

  • API经理
  • Identity Server的
  • 数据分析服务器

在单独的最新版本(我们使用现有的脚本作为创建Docker镜像的基础),它们共享同一群集中另一个群集中托管的相关MySQL数据库。经过大量配置,所有配置都可以按预期运行,我们可以添加用户/角色,创建/发布/调用API并收集这些调用的分析。然而,我们面临的最后一个问题是,一旦API发布了,就可以在商店中调用它。一旦API管理器pod重新启动(例如,通过向下/向上扩展相关部署,而不是使用碳仪表板),一旦API管理器启动并且在这种(硬)重启之后再次运行,问题就会出现,已发布的API仍然在店内看到,但是,如果有人试图拨打电话到(以前的工作)的一个端点,则返回一个404的消息和API管理器会记录以下错误:

INFO {org.apache.synapse.mediators.builtin.LogMediator} - STATUS = Message dispatched to the main sequence. Invalid URL, RESOURCE = /"context"/"endpoint being called"

其中“context”是为发布它的给定API设置的上下文,以及“端点被称为”应该接收该呼叫的服务的REST端点。此外,如果我们试图在发布者中对API进行更改(即重新发布它),似乎有50/50的机会可以运行并修复所有问题,直到下一次重新启动该容器或发生错误为止在第一步中单击“下一步:实施”按钮时已抛出here(尽管它表示已经在先前版本中已解决)。

其余设置如下:

用户/角色

  • 用户:PROD,用于在发布商创建和发布的API

  • 角色:prod-角色(没有特权的空角色),内部/创建者, 内部/发布者

  • 用户:利弊,用于在商店

  • 角色调用的API:禁忌角色(空作用,无权限的,仅仅是为了提供 访问API在商店),内部/订户

数据库

  • WSO2_CARBON_DB裁判上的MySQL荚数据库,由API管理器只使用

  • WSO2REG_DB被认为是三个模块之间的共享注册数据库(AM,DAS,是)从主数据源

摘录。从上午的xml:

 <datasource> 
      <name>WSO2_CARBON_DB</name> 
      <description>The datasource used by the registry</description> 
      <jndiConfig> 
       <name>jdbc/WSO2CarbonDB</name> 
      </jndiConfig> 
      <definition type="RDBMS"> 
       <configuration> 
       <url>jdbc:mysql://mysql-apimdb:3306/amcarbondb?autoReconnect=true&amp;useSSL=false</url> 
       <username>wso2carbon</username> 
       <password>abc</password> 
       <driverClassName>com.mysql.jdbc.Driver</driverClassName> 
       <maxActive>50</maxActive> 
       <maxWait>60000</maxWait> 
       <testOnBorrow>true</testOnBorrow> 
       <validationQuery>SELECT 1</validationQuery> 
       <validationInterval>30000</validationInterval> 
       </configuration> 
      </definition> 
     </datasource> 

     <datasource> 
      <name>WSO2AM_DB</name> 
      <description>The datasource used for API Manager database</description> 
      <jndiConfig> 
       <name>jdbc/WSO2AM_DB</name> 
      </jndiConfig> 
      <definition type="RDBMS"> 
       <configuration> 
        <url>jdbc:mysql://mysql-apimdb:3306/apimgtdb?autoReconnect=true&amp;useSSL=false</url> 
        <username>wso2carbon</username> 
        <password>abc</password> 
        <defaultAutoCommit>false</defaultAutoCommit> 
        <driverClassName>com.mysql.jdbc.Driver</driverClassName> 
        <maxActive>50</maxActive> 
        <maxWait>60000</maxWait> 
        <testOnBorrow>true</testOnBorrow> 
        <validationQuery>SELECT 1</validationQuery> 
        <validationInterval>30000</validationInterval> 
       </configuration> 
      </definition> 
     </datasource> 

     <datasource> 
      <name>WSO2UM_DB</name> 
      <description>The datasource used by user manager</description> 
      <jndiConfig> 
       <name>jdbc/WSO2UM_DB</name> 
      </jndiConfig> 
      <definition type="RDBMS"> 
       <configuration> 
       <url>jdbc:mysql://mysql-apimdb:3306/userdb?autoReconnect=true&amp;useSSL=false</url> 
       <username>wso2carbon</username> 
       <password>abc</password> 
       <driverClassName>com.mysql.jdbc.Driver</driverClassName> 
       <maxActive>50</maxActive> 
       <maxWait>60000</maxWait> 
       <testOnBorrow>true</testOnBorrow> 
       <validationQuery>SELECT 1</validationQuery> 
       <validationInterval>30000</validationInterval> 
       </configuration> 
      </definition> 
     </datasource> 

     <datasource> 
      <name>WSO2REG_DB</name> 
      <description>The datasource used for registry</description> 
      <jndiConfig> 
       <name>jdbc/WSO2REG_DB</name> 
      </jndiConfig> 
      <definition type="RDBMS"> 
       <configuration> 
        <url>jdbc:mysql://mysql-apimdb:3306/regdb?autoReconnect=true&amp;useSSL=false</url> 
        <username>wso2carbon</username> 
        <password>abc</password> 
        <driverClassName>com.mysql.jdbc.Driver</driverClassName> 
        <maxActive>50</maxActive> 
        <maxWait>60000</maxWait> 
        <testOnBorrow>true</testOnBorrow> 
        <validationQuery>SELECT 1</validationQuery> 
        <validationInterval>30000</validationInterval> 
       </configuration> 
      </definition> 
     </datasource> 

所有这些数据库中获得使用时填充并使用来自不同的产品DBscripts初始设置初始化。此外,registry.xml配置如下(示出刚刚发生改变时,所述文件的剩余部分是因为它是由默认配置的):

<currentDBConfig>wso2registry</currentDBConfig> 
<readOnly>false</readOnly> 
<enableCache>false</enableCache> 
<registryRoot>/</registryRoot> 

<dbConfig name="wso2registry"> 
    <dataSource>jdbc/WSO2CarbonDB</dataSource> 
</dbConfig> 
<dbConfig name="govregistry"> 
    <dataSource>jdbc/WSO2REG_DB</dataSource> 
</dbConfig> 

<remoteInstance url="https://localhost:9943/registry"> 
    <id>gov</id> 
    <dbConfig>govregistry</dbConfig> 
    <cacheId>[email protected]:mysql://mysql-apimdb:3306/regdb</cacheId> 
    <readOnly>false</readOnly> 
    <enableCache>false</enableCache> 
    <registryRoot>/</registryRoot> 
</remoteInstance> 

<mount path="/_system/governance" overwrite="true"> 
     <instanceId>gov</instanceId> 
     <targetPath>/_system/governance</targetPath> 
</mount> 

<mount path="/_system/config" overwrite="true"> 
     <instanceId>gov</instanceId> 
     <targetPath>/_system/config</targetPath> 
</mount> 

在它似乎是与一些数据是一个问题的端由于我们已经将所有数据库移动到另一个容器上的永久存储器,因此在重新启动时丢失了,但这不应该是一个问题 - 除非我们遗漏了某些内容。是否还需要添加/更改另一个注册表/数据源?所有其他未在上面显示的默认数据源(STATS,MB_STORE,METRICS)也设置为使用MySQL服务器,因此除非数据源文件夹中提供的数据源不在其他位置,否则所有数据都应保留在相应的MySQL数据库中。

+2

我想你还没有使用API​​ Manager的任何持久存储。当您创建API时,API工件将在文件系统中创建并存储在wso2am-2.1.0/repository/deployment/server/synapse-configs/default/api位置中。您需要拥有一个用于'wso2am-2.1.0/repository/deployment/server /'的持久存储。在你的情况下,在重启过程中,你没有相关的数据,因为你有一个新的包。 – Pubci

+0

让这条路径持久解决问题!如果您将其作为回复发布,我会将其标记为答案。 – LiPo

+0

很高兴听到。我已经发布了答案。 – Pubci

回答

0

我想你还没有使用API​​ Manager的任何持久存储。当您创建API时,API工件将在文件系统中创建并存储在wso2am-2.1.0/repository/deployment/server/synapse-configs/de fault/api位置中。您需要拥有一个用于'wso2am-2.1.0/repository/deployment/server /'的持久存储。在你的情况下,在重启过程中,你没有相关的数据,因为你有一个新的包。