자바 는 Semaphore 를 사용 하여 단일 인 터 페 이 스 를 제한 합 니 다.
4286 단어 Java단일 인터페이스흐름 을 제한 하 다
1.1 효과 설명
이 편 은 주로 Semaphore 를 사용 하여 단일 인 터 페 이 스 를 제한 하 는 방법 을 말한다.예 를 들 어 다음 과 같은 장면 이 있다.
a.A 시스템 의 a 인 터 페 이 스 는 주로 B 시스템 에 호출 되 는데 지금 은 B 시스템 에 대해 제한 을 하고 싶 습 니 다.예 를 들 어 처리 피크 가 100 이 고 100 이 넘 는 요청 이 빠 른 속도 로 실 패 했 습 니 다.
b.인 터 페 이 스 는 총 스위치 입구 로 서 모든 외부 방문 을 제한 하고 자 합 니 다.예 를 들 어 특정한 방 은 100 명의 게이머 만 온라인 에 있 을 수 있 고 앞의 처리 가 끝나 야 뒤의 요청 을 계속 할 수 있 습 니 다.
c.다른 유형의 장면,즉 자원 이 고정된 상황 에서 돌아 가면 서 자원 을 사용 해 야 하 는 경우 Semaphore 를 사용 할 수 있다.
필드 적용 안 됨
a.전체 입 구 를 대상 으로 흐름 을 제한 하기 때문에 IP 또는 token 등에 따라 흐름 을 제한 할 수 없고 적용 장면 이 비교적 고정 적 이다.
b.후속 블 로그 에 서 는 IP/Token 등급 에 대한 다른 제한 흐름 을 어떻게 사용 하 는 지 소개 합 니 다.예 를 들 어 AOP+Redis+Lua 가 제한 흐름 을 진행 하 는 지 소개 합 니 다.
장점
a.IP 등급 의 제한 흐름 에 비해 Semaphore 는 상대 적 으로 간단 하고 상기 장면 에 대해 제한 효 과 를 신속하게 실현 할 수 있다.
실현 난이도:3 개 별
1.2 핵심 지식 포인트
주로 다음 과 같은 기술 점 을 사용한다.
a. springboot
b.jc 가방 의 Semaphore(try Acquire,release 방법)
Semaphore 주요 설명
a.Semaphore 에 서 는 try Acquire 와 acquire 를 통 해 허가증(기본 값)을 얻 을 수 있 으 며,release 를 통 해 허가증 을 방출 할 수 있 습 니 다.
b.두 가지 허가증 을 얻 는 주요 한 차 이 는 바로 전자 가 막 히 지 않 고 후자 가 막 히 는 것 이다.만약 에 우리 가 빠 른 실패 효 과 를 실현 하려 면 반드시 비 차단 으로 허가증 을 얻 는 방법 을 사용 해 야 한다.
주의 점
a.반드시 release 방법 이 호출 되 는 지 확인 해 야 합 니 다.예 를 들 어 finally 에 넣 어야 합 니 다.그렇지 않 으 면 허가증 이 풀 리 지 않 고 인터페이스 가 모두 빠 져 서 요청 을 받 을 수 없습니다.
둘째, 환경 구축
환경 사용 idea+spring initializr 생 성
새 springboot 웹 프로젝트
패키지 디 렉 터 리 설명
새 Semaphore 컨트롤 러,요청 경 로 는 limit
a.주의 점 코드 주석 설명
package com.codecoord.semaphore.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.concurrent.Semaphore;
/**
*
*
* @author [email protected]
* @since 2020-08-06
*/
@RestController
public class SemaphoreController {
/**
* , 3, ,
*/
private static final int MAX_SEMAPHORE = 3;
/**
* Semaphore ,
*/
private static final Semaphore SEMAPHORE = new Semaphore(MAX_SEMAPHORE);
@RequestMapping("/limit")
public String limit() {
// 01. tryAcquire,
if (!SEMAPHORE.tryAcquire()) {
return " :" + MAX_SEMAPHORE;
}
// 02. ,
/// todo , , release
/*if (valid(xxx)) {
SEMAPHORE.release();
}*/
try {
// 03. , 1s
Thread.sleep(1000);
return " ";
} catch (InterruptedException e) {
//
return " ";
} finally {
// 04. ,
SEMAPHORE.release();
}
}
}
3.흐름 제한 시연3.1 동시 다발 요청 도구
동시 요청 은 apache-jmeter-5.2.1 을 바탕 으로 테스트 할 것 입 니 다.jmeter 의 사용 은 상대 적 으로 간단 하 므 로 독자 스스로 바 이 두 를 사용 하 십시오.
이 스 레 드 그룹의 스 레 드 수량 은 10 개 입 니 다.실제 환경 에서 필요 에 따라 설정 크기 를 조정 합 니 다.
3.2 효과 예시 도
테스트 를 시작 하면 처리 에 성공 한 것 은 세 개 뿐 이 고 나머지 7 개 는 모두 실패 한 것 을 볼 수 있 습 니 다.
a.성공 요청
b.요청 실패
자바 가 Semaphore 를 사용 하여 단일 인 터 페 이 스 를 제한 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 단일 인터페이스 제한 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.