ckdev
(Chris Kennedy)
3월 28, 2023, 6:40오후
1
안녕하세요,
Discourse API를 사용하여 포럼에서 재미있는 응답을 하려고 하고 있습니다. 예를 들어, 누군가 스레드에서 "Linux"라고 입력하면 Discobot이 "GNU/Linux를 말씀하시는 건가요?"라고 응답하는 방식입니다.
이 기능은 잘 작동하지만, 누군가 동일한 문구로 응답하는 경우 2분 동안(거의 정확히 2분) 429错误或 빈 응답이 여러 번 반환됩니다. 그 이후에는 API가 다시 정상적으로 응답을 처리합니다.
예를 들어:
Linux
FOSS
dotnet
Java
Linux
이 경우 정상적으로 작동합니다. 그러나:
Linux
FOSS
dotnet
Linux
Linux
이 경우 오류가 발생합니다.
이 2분 창(window)이 무엇을 의미하는지 아시는 분이 있을까요? app.yml 설정을 조정하고 API 속도 제한(rate limits)을 변경해 보았지만, 효과가 없는 것 같습니다.
감사합니다!
Falco
(Falco)
3월 28, 2023, 6:46오후
2
추가 정보가 필요합니다. 429 오류를 반환하는 API 엔드포인트는 무엇인가요?
ckdev
(Chris Kennedy)
3월 28, 2023, 6:47오후
3
https://forum.domain.net/t/1000/highestPost.json
해당 URL에 대해 GET 요청을 수행합니다.
highestPost는 해당 스레드의 highest_post_number입니다.
Falco
(Falco)
3월 28, 2023, 6:50오후
4
이는 요청이 속도 제한(rate limit)을 받고 있다는 뜻입니다. 새 게시물을 추적하려면 이러한 방식의 폴링(pooling)은 매우 비효율적입니다. 웹훅(webhooks) 사용을 제안합니다. 이렇게 하면 새 게시물이 생겼을 때에만 반응할 수 있어, 아무 일도 일어나지 않을 때에도 폴링을 계속할 필요가 없습니다.
ckdev
(Chris Kennedy)
3월 28, 2023, 6:52오후
5
네, 웹훅을 한번 살펴보겠습니다.
응답 속도 제한(rate-limit)을 비활성화하는 방법을 아시나요? 이미 app.yml에서 API와 관련된 몇 가지 설정을 변경한 것으로 보입니다. 아래 링크에서 확인해 보시면 됩니다:
Discourse ships with 3 different global rate limits that can be configured by site admins.
Global per-ip rate limits
These limits apply to every unique IP address that hits the Discourse application. (files that are served directly from the filesystem or the CDN are excluded)
By default this rate limit is enabled, you may disable it or set it to a reporting mode.
DISCOURSE_MAX_REQS_PER_IP_MODE : default block, this rate limit applies out of the box. (other options are warn, warn+block, and n…
이것이 Nginx에서 특정 설정을 살펴봐야 하는 문제인가요?
Falco
(Falco)
3월 28, 2023, 6:57오후
6
기본적으로 추가되는 nginx 템플릿이 있습니다. app.yml의 맨 위쪽 줄 중 하나에 위치합니다. 적용되려면 레이트 리밋(rate limit) 관련 설정을 제거하고 다시 빌드해야 할 수 있습니다.
ckdev
(Chris Kennedy)
3월 28, 2023, 7:01오후
7
와~! 한번 시도해볼게요. 도움 주셔서 감사합니다!