org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController @RequestMapping("/demo2") public class Controller2 { @GetMapping("/test21") public String test1() { return "test21!"; }
@GetMapping("/test22")
public String test2() {
return "test22!";
}
}
yaml
server: port: 8002 spring: application: name: service2
eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ instance: prefer-ip-address: true
java
package com.tay.eurekaserver;
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer @SpringBootApplication public class EurekaserverApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaserverApplication.class, args);
}
}
yaml
server: port: 8761
eureka: client: register-with-eureka: false fetch-registry: false
bash
sudo docker run -d -p 6379:6379 redis
spring: redis-limiter:
redis-host: 127.0.0.1 # redis server IP default:127.0.0.1
redis-port: 6379 # redis service port default:6379
redis-password: test # redis password default:null
redis-connection-timeout: 2000 # redis connection timeout default:2000
redis-pool-max-idle: 50 # redis pool max idle default: 50
redis-pool-min-idle: 10 # redis pool mim idle default:10
redis-pool-max-wait-millis: -1 # max wait time for get connection default:-1
redis-pool-max-total: 200 # max total connection default:200
redis-key-prefix: #RL # key prefix for visit footprint default: #RL
check-action-timeout: 100 # check action execution timeout default: 100
channel: #RLConfigChannel # conf change event pub/sub channel default: #RLConfigChannel
policy-map: # rate limiting policies
api-a: # unique service id
order: -1 # order
baseExp: Headers['userid'] # value to base on, Spel expression without "#", supports Headers['xxx'] or Cookies['xxx']
pathRegExp: /s1/.* # URI path pattern, a Regular expression
timeUnit: MINUTES # timeUnit supports SECONDS, MINUTES, HOURS,DAYS
permits: 2 # Number of visits allowed per a timeUnit
api-a1:
order: 0
baseExp: Headers['userid']
pathRegExp: /s1.*
timeUnit: MINUTES
permits: 3
...
Dynamic configuration
We can change the limiting policy by internal RESTful API.
@RequestMapping("/zuullimiterpolicy")
public class LimitingPolicyResource {
...
@PostMapping
public void add(@RequestBody LimitingPolicy limitingPolicy, HttpServletResponse response) throws IOException{
...
}
@PutMapping
public void update(@RequestBody LimitingPolicy limitingPolicy, HttpServletResponse response) throws IOException {
...
} В запросе представлен текст технической направленности из области разработки и тестирования программного обеспечения. Основной язык текста запроса — английский.
Вот перевод текста на русский язык:
В настоящее время этот фреймворк поддерживает четыре действия (добавление, обновление, запрос, удаление).
Например (как в проекте zuulapp):
Результат GET-запроса к http://localhost:8000/zuullimiterpolicy/api-a будет выглядеть следующим образом:
```json
{
"serviceId": "api-a",
"order": -1,
"baseExp": "Headers['userid']",
"pathRegExp": "/s1/.*",
"timeUnit": "MINUTES",
"permits": 2,
"delete": false
}
Если мы хотим обновить конфигурацию, назначим Content-Type как application/json, а затем выполним PUT-запрос к http://localhost:8000/zuullimiterpolicy, то тело запроса будет таким:
{
"serviceId": "api-a",
"order": -1,
"baseExp": "Headers['userid']",
"pathRegExp": "/s1/.*",
"timeUnit": "MINUTES",
"permits": 10,
"delete": false
}
Тогда ограничительная политика для сервиса с serviceId «api-a» изменится.
Если мы захотим удалить ограничительную политику с serviceId «api-b», выполним DELETE-запрос к http://localhost:8000/zuullimiterpolicy/api-b, тогда ограничительная политика с serviceId «api-b» будет удалена.
Чтобы добавить новую ограничительную политику, назначим Content-Type как application/json и выполним POST-запрос к http://localhost:8000/zuullimiterpolicy. Тело запроса будет следующим:
{
"serviceId": "api-d",
"order": -1,
"baseExp": "Headers['userid']",
"pathRegEp": "/s3/.*",
"timeUnit": "MINUTES",
"permits": 10,
"delete": false
}
Обратите внимание, что serviceId и pathRegExp не должны конфликтовать с уже существующими ограничительными политиками.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )