나는 모든 트위터 계정에 대해 5000 명의 팔로어를 가져올 수 있도록 스프링 부트 HTTP 메소드를 구현했습니다. 백엔드에서 Twitter4j - AsyncTwitter : TwitterListener의 응답을 시작 요청과 연결
, 먼저, I는 그때 100의 청크 5000 개 ID를 분할하고, 그 후
IDs ids = twitter.getFollowersIDs(username, -1);
으로 5000 종동 ID를 검색하고, 그러고 AsyncTwitter 사용하고 트위터에 여러 개의 "lookupUsers"HTTP 요청을 비동기 적으로 보내고 LOCK.wait(); 다음 리스너 방법 다음
:
@Override
public void lookedupUsers(ResponseList<User> users)
나는 각 응답을 읽고 클래스 속성 "followerAccounts"에 반환 된 사용자 목록을 추가 할 수 있습니다.
결국 모든 응답이 반환되면 LOCK.notify()를 사용하여 주 스레드의 차단을 해제하고 HTTP 메서드의 응답으로 "followerAccounts"를 반환합니다.
두 명의 외부 사용자가 동일한 스프링 HTTP 메서드를 동시에 호출하면 문제가되는 두 가지 HTTP 요청 중 "looksupUsers"메서드 내에서 TwitterListener를 체크 인 할 수 없습니다.
예를 들어 lookupUsers (ResponseList 사용자) 메소드 내의 Twitter HTTP 응답의 일부 헤더 또는 응답에 링크 된 "lookupUsers"요청을 어떻게 든 가리키는 매개 변수를 전달하는 방법은 무엇입니까?
많은 수의 병렬 요청을 지원하기 위해 확장되지 않기 때문에 HTTP 메서드를 동기화하고 싶지 않습니다.
"메인 스레드"라고하는 것은 실제로 HTTP 요청으로 시작된 스레드입니다 ... 다른 요청과 어떻게 섞일 수 있는지 보지 못합니다. 어쩌면 내가하지 않았을 수도 있습니다. 너를 올바르게 이해한다. 어쨌든 스레드를 일시 중지하는 것은 나에게 좋지 않습니다. – Fernando