使用API​​Spark restlet扩展限制Restlet资源上的请求 [英] Limit request on a Restlet resource with APISpark restlet extension

查看:132
本文介绍了使用API​​Spark restlet扩展限制Restlet资源上的请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下是限制分钟请求数量的代码:

Here's my code to limit the number of request for minute:

        MethodAuthorizer ma = createMethodAuthorizer();
        ma.setNext(router);

        FirewallRule rule = new PeriodicFirewallCounterRule(60, TimeUnit.SECONDS, new IpAddressCountingPolicy());
        ((PeriodicFirewallCounterRule)rule).addHandler(new RateLimitationHandler(new UniqueLimitPolicy(10)));
        FirewallFilter firewallFiler = new FirewallFilter(getContext(), list(rule));
        firewallFiler.setNext(ma);

        return ma;

问题是没有错误,但即使从资源请求的请求超过10个仍然没有抛出太多请求

The problem is that there is no error, but even if more than 10 request is requested from the resource still it does not throw "Too Many Request"

推荐答案

我使用GAE项目中的配置代码并使用开发服务器。

I make it work using your configuration code within a GAE project and with the dev server.

我使用了Restlet版本2.3.1 / GAE版本1.9.18以及以下代码作为客户端:

I used the version 2.3.1 of Restlet / version 1.9.18 of GAE and the following code as a client:

public static void main(String[] args) {
    int i = 0;
    try {
        while (i < 30) {
            ClientResource cr = new ClientResource("http://localhost:8080/test");
            Representation repr = cr.get();
            System.out.println(">> call #"+i);
            Thread.sleep(100);

            i++;
        }
    } catch (Exception ex) {
        System.out.println(">> call #" + i + " failed");
        ex.printStackTrace();
    }
}

在第10次通话后我有以下异常:

I have the following exception after on the 10th call:

>> call #0
>> call #1
>> call #2
>> call #3
>> call #4
>> call #5
>> call #6
>> call #7
>> call #8
>> call #9
>> call #10 failed
429 (429) - The server is refusing to service the request because the user has sent too many requests in a given amount of time ("rate limiting")
    at org.restlet.resource.ClientResource.doError(ClientResource.java:590)
    at org.restlet.resource.ClientResource.handleInbound(ClientResource.java:1153)
    at org.restlet.resource.ClientResource.handle(ClientResource.java:1048)
    at org.restlet.resource.ClientResource.handle(ClientResource.java:1023)
    at org.restlet.resource.ClientResource.handle(ClientResource.java:928)
    at org.restlet.resource.ClientResource.get(ClientResource.java:636)
    at org.restlet.gae.test.GaeRestletClient.main(GaeRestletClient.java:15)

希望它可以帮到你,
Thierry

Hope it helps you, Thierry

这篇关于使用API​​Spark restlet扩展限制Restlet资源上的请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆