--- dao/DaoAdresseService/src/dk/daoas/daoadresseservice/GoogleStreetnameHelper.java 2015/02/28 16:14:55 2409 +++ dao/DaoAdresseService/src/main/java/dk/daoas/daoadresseservice/GoogleStreetnameHelper.java 2015/06/07 18:09:16 2567 @@ -10,7 +10,10 @@ import com.google.code.geocoder.model.GeocoderResult; import com.google.code.geocoder.model.GeocoderStatus; +import com.google.common.util.concurrent.RateLimiter; + import dk.daoas.daoadresseservice.admin.ServiceConfig; +import dk.daoas.daoadresseservice.beans.SearchRequest; import dk.daoas.daoadresseservice.beans.SearchResult; import dk.thoerup.circuitbreaker.CircuitBreaker; import dk.thoerup.circuitbreaker.CircuitBreakerManager; @@ -19,19 +22,24 @@ public class GoogleStreetnameHelper implements StreetnameHelper { ServiceConfig conf; + RateLimiter limiter; + public GoogleStreetnameHelper(ServiceConfig conf) { this.conf = conf; + + limiter = RateLimiter.create( 10.0 ); //max 10 req /sec } @Override - public String proposeStreetName(SearchResult result, int postnr, String vejnavn) { + public String proposeStreetName(SearchRequest request, SearchResult result) { if (conf.useGoogle == false) return null; + result.google = true; try { - GoogleInvocation wrapper = new GoogleInvocation( conf, postnr, vejnavn ); + GoogleInvocation wrapper = new GoogleInvocation( limiter, conf, request.postnr, request.vejnavn ); CircuitBreaker breaker = CircuitBreakerManager.getManager().getCircuitBreaker("google"); @@ -49,8 +57,10 @@ ServiceConfig conf; int postnr; String vejnavn; + RateLimiter limiter; - public GoogleInvocation(ServiceConfig conf, int postnr, String vejnavn) { + public GoogleInvocation(RateLimiter limiter, ServiceConfig conf, int postnr, String vejnavn) { + this.limiter = limiter; this.conf = conf; this.postnr= postnr; this.vejnavn = vejnavn; @@ -59,6 +69,8 @@ @Override public String proceed() throws Exception { + + limiter.acquire(); final Geocoder geocoder; if ( conf.googleApiKey != null ) {