wso2 API Manager和BAM - 如何控制API调用?

时间:2012-09-05 14:04:25

标签: wso2 esb wso2-am wso2carbon wso2bam

如何检索API调用的数量?我知道数据必须在某处,因为wso2 BAM显示了具有相似数据的饼图......

我想在调解序列中得到这个数字;那可能吗?这可能是通过DB查找来实现的吗?

1 个答案:

答案 0 :(得分:0)

WSO2 API Manager中API使用监控的工作方式是, API处理程序 org.wso2.carbon.apimgt.usage.publisher.APIUsageHandler )为每个通过API网关的请求和响应调用。在此处理程序中,有关API使用的所有相关信息都将发布到WSO2 BAM服务器。 WSO2 BAM服务器将此数据保存在随附的Cassandra数据库中。然后有一个BAM工具箱,其中包含了使用可以安装在BAM服务器上的Apache Hive编写的必需分析脚本。这些脚本会定期汇总数据并将汇总数据保存到sql数据库。因此, API Publisher Web应用程序中显示的图形和图表是使用sql数据库中的汇总数据创建的。

现在,如果您需要的是从这些汇总的sql表中提取的,那么我认为这个过程非常简单。您可以使用DBLookup介体。但是,如果由于总结而丢失了您需要的某些数据,那么您还需要做更多的工作。

您有两种选择。

  1. 根本不涉及编码的最简单方法是编写适合您需求的自定义Hive脚本,并将数据汇总到sql表。然后,像之前一样使用DBLookup介体来读取数据。您可以查看产品附带的现有Hive脚本,以了解它的编写方式。
  2. 如果你不想在图片中使用BAM,你仍然可以用最少的编码来完成,如下所示。执行发布的实现类是 org.wso2.carbon.apimgt.usage.publisher.APIMgtUsageDataBridgeDataPublisher 。此类实现接口 org.wso2.carbon.apimgt.usage.publisher.APIMgtUsageDataPublisher 。界面有三种实例方法如下。

    public void init()

    public void publishEvent(RequestPublisherDTO requestPublisherDTO)

    public void publishEvent(ResponsePublisherDTO responsePublisherDTO)

  3. init()方法在服务器启动期间只运行一次。您可以在此处添加引导该类所需的所有逻辑。 publishEvent(RequestPublisherDTO)是您发布请求事件的地方,publishEvent(ResponsePublisherDTO)是您发布响应事件的位置。 DTO对象分别是请求和响应数据的封装表示。

    您需要做的是为此界面编写一个新实现,并将其配置为 api-manager.xml DataPublisherImpl 属性的值。为了简化操作,您可以简单地扩展现有的 org.wso2.carbon.apimgt.usage.publisher.APIMgtUsageDataBridgeDataPublisher ,编写必要的逻辑以将使用数据保存到init(),publishEvent中的sql数据库中(RequestPublisherDTO)和publishEvent(ResponsePublisherDTO)并在每个方法的末尾只调用它各自的超类方法。 例如。重写init()将调用super()。init()。这样,您只需为需求添加必要的代码,并将BAM统计信息收集要求留给超类。