자바 는 Semaphore 를 사용 하여 단일 인 터 페 이 스 를 제한 합 니 다.

실전 설명
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 를 사용 하여 단일 인 터 페 이 스 를 제한 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 자바 단일 인터페이스 제한 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기