2016-11-02 13 views
3

トークンの有効性要求ごとに20Kを作成するようにトークンを制限できますか?私のユースケースは、 年有効とトークン制限ごとに20Kのトークンをユーザーに与えます。WSO2 APIマネージャー - トークン制限20KPerToken

ありがとうございました!

編集:私はしたいと私はできるだけ多くのリクエストを実行することができますので、 私はアプリケーションの制限20PerYearを追加し、有効性-1でトークンを生成しています、それだけではなく、働いていない20

ユースケース:I私のAPIにクライアントの20K要求を時間に依存することなく販売したいと考えています。おそらくWSO2には私のユースケースのための別の解決策がありますか?

UPDATE:5PerAllTime Application

3)を生成し、新たな作成のための生産トークンをトークンクォータごとに新しい作成したアプリケーションAllTimeを選択) Admin

2:私は5PerAllTimeアプリケーション層を追加

1)アプリケーションAllTime有効期間付き-1

2)アプリケーションにPizzaShackAPIを追加

4)多くのメニュー要求を取得できますが、制限は表示されません。\

私は間違っていますか?

SOLUTION:

すべての作業。私は、Windows上だと私は悪い何かがWindows上のファイルパスで起こっログで見た、私は新しいアプリケーション層を追加しているとき:

TID: [-1234] [] [2016-11-03 10:02:36,113] ERROR {org.apache.axis2.rpc.receivers.RPCMessageReceiver} - Illegal char <:> at index 2: /D:/taras2/wso2/WSO2AM~1.0/bin/../repository/deployment/server/\executionplans {org.apache.axis2.rpc.receivers.RPCMessageReceiver} 
java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:483) 
    at org.apache.axis2.rpc.receivers.RPCUtil.invokeServiceClass(RPCUtil.java:212) 
    at org.apache.axis2.rpc.receivers.RPCMessageReceiver.invokeBusinessLogic(RPCMessageReceiver.java:117) 
    at org.apache.axis2.receivers.AbstractInOutMessageReceiver.invokeBusinessLogic(AbstractInOutMessageReceiver.java:40) 
    at org.apache.axis2.receivers.AbstractMessageReceiver.receive(AbstractMessageReceiver.java:110) 
    at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:180) 
    at org.apache.axis2.transport.http.HTTPTransportUtils.processHTTPPostRequest(HTTPTransportUtils.java:173) 
    at org.apache.axis2.transport.http.AxisServlet.doPost(AxisServlet.java:146) 
    at org.wso2.carbon.core.transports.CarbonServlet.doPost(CarbonServlet.java:231) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:650) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    at org.eclipse.equinox.http.servlet.internal.ServletRegistration.service(ServletRegistration.java:61) 
    at org.eclipse.equinox.http.servlet.internal.ProxyServlet.processAlias(ProxyServlet.java:128) 
    at org.eclipse.equinox.http.servlet.internal.ProxyServlet.service(ProxyServlet.java:68) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) 
    at org.wso2.carbon.tomcat.ext.servlet.DelegationServlet.service(DelegationServlet.java:68) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.owasp.csrfguard.CsrfGuardFilter.doFilter(CsrfGuardFilter.java:88) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.wso2.carbon.ui.filters.CSRFPreventionFilter.doFilter(CSRFPreventionFilter.java:88) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.wso2.carbon.ui.filters.CRLFPreventionFilter.doFilter(CRLFPreventionFilter.java:59) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.wso2.carbon.tomcat.ext.filter.CharacterSetFilter.doFilter(CharacterSetFilter.java:61) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.filters.HttpHeaderSecurityFilter.doFilter(HttpHeaderSecurityFilter.java:120) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 
    at org.wso2.carbon.tomcat.ext.valves.CompositeValve.continueInvocation(CompositeValve.java:99) 
    at org.wso2.carbon.tomcat.ext.valves.CarbonTomcatValve$1.invoke(CarbonTomcatValve.java:47) 
    at org.wso2.carbon.webapp.mgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:57) 
    at org.wso2.carbon.event.receiver.core.internal.tenantmgt.TenantLazyLoaderValve.invoke(TenantLazyLoaderValve.java:48) 
    at org.wso2.carbon.tomcat.ext.valves.TomcatValveContainer.invokeValves(TomcatValveContainer.java:47) 
    at org.wso2.carbon.tomcat.ext.valves.CompositeValve.invoke(CompositeValve.java:62) 
    at org.wso2.carbon.tomcat.ext.valves.CarbonStuckThreadDetectionValve.invoke(CarbonStuckThreadDetectionValve.java:159) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) 
    at org.wso2.carbon.tomcat.ext.valves.CarbonContextCreatorValve.invoke(CarbonContextCreatorValve.java:57) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:436) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1078) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1749) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1708) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 
Caused by: java.nio.file.InvalidPathException: Illegal char <:> at index 2: /D:/taras2/wso2/WSO2AM~1.0/bin/../repository/deployment/server/\executionplans 
    at sun.nio.fs.WindowsPathParser.normalize(WindowsPathParser.java:182) 
    at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:153) 
    at sun.nio.fs.WindowsPathParser.parse(WindowsPathParser.java:77) 
    at sun.nio.fs.WindowsPath.parse(WindowsPath.java:94) 
    at sun.nio.fs.WindowsFileSystem.getPath(WindowsFileSystem.java:255) 
    at java.nio.file.Paths.get(Paths.java:84) 
    at org.wso2.carbon.event.processor.core.internal.util.EventProcessorUtil.validateFilePath(EventProcessorUtil.java:387) 
    at org.wso2.carbon.event.processor.core.internal.util.EventProcessorConfigurationFilesystemInvoker.save(EventProcessorConfigurationFilesystemInvoker.java:77) 
    at org.wso2.carbon.event.processor.core.internal.CarbonEventProcessorService.deployExecutionPlan(CarbonEventProcessorService.java:127) 
    at org.wso2.carbon.event.processor.admin.EventProcessorAdminService.deployExecutionPlan(EventProcessorAdminService.java:53) 
    ... 63 more 

そのエラーの後、私は選択ボックスの中に自分のアプリケーション層を見ることができますが、そこにあります私の層のためのシステム内のファイルと制限が機能しません。そこで、このファイルをファイルパス$ {carbon.home}/repository/deployment/server/executionplansに手動で追加しました。 (carbon.super_app_20KPerYear.siddhiqlという名前)20KPerYear新しい実行計画の

例:

/* Enter a unique ExecutionPlan */ 
@Plan:name('carbon.super_app_20KPerYear') 

/* Enter a unique description for ExecutionPlan */ 
@Plan:description('Allows 20K request per year') 

/* define streams/tables and write queries here ... */ 

@Import('org.wso2.throttle.processed.request.stream:1.0.0') 
define stream RequestStream (messageID string, appKey string, appTier string, subscriptionKey string, apiKey string, apiTier string, subscriptionTier string, resourceKey string, resourceTier string, userId string, apiContext string, apiVersion string, appTenant string, apiTenant string, appId string, apiName string, propertiesMap string); 

@Export('org.wso2.throttle.globalThrottle.stream:1.0.0') 
define stream GlobalThrottleStream (throttleKey string, isThrottled bool, expiryTimeStamp long); 

FROM RequestStream 
SELECT messageID, (appTenant == 'carbon.super' and appTier == '20KPerYear') AS isEligible, appKey AS throttleKey 
INSERT INTO EligibilityStream; 

FROM EligibilityStream[isEligible==true]#throttler:timeBatch(1 year, 0) 
select throttleKey, (count(messageID) >= 20000) as isThrottled, expiryTimeStamp 
group by throttleKey 
INSERT ALL EVENTS into ResultStream; 

from ResultStream#throttler:emitOnStateChange(throttleKey, isThrottled) 
select * 
insert into GlobalThrottleStream; 

答えて

1

あなたはこのためApplication Level調整ポリシーを設定することができます。詳細情報hereを読んでください。

更新:1年あたりのリクエスト数を制限するには、スロットルレベルを20kPerYearに設定します。 1年後にトークンを期限切れにするには、AccessTokenDefaultValidityPeriodidentity.xmlに設定します。

私はこれをうまく動作させるために、20年という制限を設けました。この応答で約21〜22回の要求要求が失敗した後。

{"fault":{"code":900803,"message":"Message throttled out","description":"You have 
exceeded your quota","nextAccessTime":"2016-Dec-20 00:00:00+0000 UTC"}} 

調整は非同期で行われるため、20回のリクエストの後に調整が行われないことがあります。小さなバッファがあります。

+0

私はそれについて知っています。しかし、私は正確に何を設定する必要がありますか? 20KPerYearアプリケーションレベルのスロットル?私の場合、1年の間トークンを生成しますか? –

+0

はい、回答を更新しました。 – Bee

+0

ありがとう、ありがとう。明日あなたのソリューションを試してみます。時間制限なしで20PerUserのアクセスはどうですか? (私の質問のように編集する) –

関連する問題