카우치베이스 이벤트 서비스 는 데이터 변경 이벤트(생성, 업데이트, 삭제/만료)를 처리하는 자체 함수를 작성할 수 있는 프레임워크를 제공합니다. 카우치베이스 서버 6.5는 이벤트 서비스에 중요한 개선 사항을 도입하여 많은 새로운 사용 사례를 가능하게 하고 이브닝 함수의 유지 관리를 간소화합니다.
소스 버킷 돌연변이
이벤트 함수는 함수의 소스 버킷이라고 하는 한 버킷의 변경 사항을 수신하도록 정의됩니다. 이전 버전의 Couchbase에서는 함수가 소스 버킷의 문서를 변경하는 것을 허용하지 않았는데, 이러한 변경 사항이 함수에 피드백될 경우 무한 재귀가 발생할 수 있기 때문입니다. 이제 이벤트 함수가 소스 버킷의 문서, 심지어 변경 이벤트의 문서까지 변경할 수 있습니다. Couchbase는 이러한 변경이 동일한 Eventing 함수로 재귀적으로 전파되는 것을 억제하여 안전하게 만듭니다.
소스 버킷에서 문서를 변경할 수 있게 되면 변경된 문서를 새로운 속성으로 보강하고, 종속 문서의 계단식 업데이트 또는 삭제를 수행하고, 같은 버킷에서 새 문서를 생성하는 등 흥미로운 사용 사례가 많이 생깁니다.
아래 예는 이벤트 발생을 사용하여 문서의 생성 시간과 마지막 업데이트 시간이 포함된 문서 속성을 자동으로 생성합니다. 이 예제에서는 문서에 대한 여행 샘플 버킷을 생성하고 문서가 변경될 때마다 시간 속성을 생성하거나 업데이트합니다. 이벤트 함수는 소위 버킷 바인딩을 통해 버킷에 액세스합니다. 우리는 읽기-쓰기 버킷 바인딩을 여행 샘플 버킷, 즉 소스 버킷에 별칭을 지정합니다. 버킷:
다음 단계에서는 함수의 코드를 입력합니다:
1 2 3 4 5 6 7 8 9 10 |
함수 온업데이트(doc, 메타) { 로그('docId', 메타.id); var 시간 = 날짜.지금(); doc["업데이트됨"] = 시간; 만약 (!("created" in doc)) { doc["created"] = 시간; } 로그('newDoc', 메타, doc); 버킷[메타.id] = doc; } |
에서 온업데이트 핸들러는 모든 삽입 및 업데이트 이벤트에서 호출되며, 현재 시간을 업데이트 속성을 추가(생성 또는 교체)하세요. 문서에 아직 생성 속성을 사용하면 문서의 첫 번째 변경 사항이라고 가정하므로 다음을 추가합니다. 생성 속성에 현재 시간도 추가합니다. 새 속성으로 문서를 확장한 후에는 동일한 문서 ID로 소스 버킷에 다시 작성합니다.
변경함으로써 업데이트 그리고 생성 속성을 변경하면 문서에 새로운 변경 사항을 생성합니다. Eventing 프레임워크는 이러한 변경 사항을 함수에 전파하지 않음으로써 재귀를 억제합니다. 그렇지 않으면 이러한 변경 사항은 일반적인 방식으로 처리됩니다. 즉, 복제되고 색인되며 심지어 다른 Eventing 함수로 전파됩니다.
cURL로 외부 함수 호출하기
이벤트 함수는 다음을 사용하여 외부 시스템과 상호 작용할 수 있습니다. curl 함수를 사용하여 REST API를 호출할 수 있습니다. 외부 시스템과의 상호 작용 가능성은 데이터 변경 사항을 다른 시스템으로 전파하고, 흥미로운 이벤트에 대해 애플리케이션에 알리고, 외부 시스템의 데이터로 문서를 보강하는 등 많은 새로운 사용 사례를 열어줍니다. 이전 버전의 Couchbase에서는 이미 curl 기능의 미리 보기를 사용할 수 있었지만 6.5에서는 이 기능이 안정적이고 안전하게 재설계되어 cURL 호출은 미리 정의된 URL 바인딩 집합으로 제한되며, 각 바인딩에 대해 필요에 따라 인증, 암호화 및 인증서 유효성 검사를 지정할 수 있습니다.
다음 예제에서는 여행 샘플 버킷의 변경 사항을 수신하는 애플리케이션을 정의하겠습니다. 아래 애플리케이션 코드를 파일에 저장합니다. app.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
const Express = require("express"); const BasicAuth = require("express-basic-auth"); const 바디파서 = require("body-parser"); var 앱 = Express(); 앱.사용(바디파서.json()); 앱.사용(바디파서.urlencoded({ 확장: true })); 앱.사용(BasicAuth({ 사용자: { 'couchbase': 'password' } })) 앱.post("/api/airline", (요청, 응답) => { var id = 요청.body.id; 콘솔.로그("항공사 " + id + " 변경됨"); 응답.보내기("OK"); }); var 서버 = 앱.듣기(3000, () => { 콘솔.로그("듣기..."); }); |
애플리케이션이 엔드포인트를 정의합니다. /api/airline 를 사용하여 항공사 ID가 포함된 본문이 포함된 POST 요청으로 항공사 데이터 변경에 대한 알림을 받을 수 있습니다. 애플리케이션은 기본 인증으로 구성되어 사용자가 카우치베이스 비밀번호로 비밀번호.
다음 명령을 실행하여 필요한 node.js 패키지를 설치하고 애플리케이션을 실행합니다:
1 2 3 |
npm init -y npm 설치 express body-파서 express-기본-auth --저장 노드 앱.js |
이제 항공사 문서의 변경 사항을 애플리케이션에 알리는 이벤트 함수를 만들어 보겠습니다. 함수에서 호출할 수 있는 모든 외부 API는 URL 바인딩으로 선언해야 합니다. 192.168.61.1이 애플리케이션을 시작한 컴퓨터의 IP라고 가정하고, URL에 대한 URL 바인딩을 선언합니다. http://192.168.61.1:3000/api 이름을 지정하고 notifyApi.
URL 바인딩은 http 또는 https 프로토콜을 사용할 수 있습니다. 또한 다양한 인증 유형을 지정하고 쿠키를 활성화하여 반복 인증을 피할 수 있습니다. 저희의 경우, 기본 인증으로 사용자 카우치베이스 및 비밀번호 비밀번호.
다음 단계에서는 문서의 유형 변경을 수신하는 함수의 코드를 제공합니다. 항공사 를 사용하여 이러한 변경 사항을 애플리케이션에 전달합니다. curl 호출합니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
함수 온업데이트(doc, 메타) { 만약 (doc.유형 == '항공사') { var 요청 = { 경로: '/에어라인', body: { id : 메타.id, 값 : doc } }; 로그('요청', 요청); var 응답 = curl('POST', notifyApi, 요청); 만약 (응답.상태 != 200) { 로그('요청 실패', 응답); } } } |
그리고 curl 함수는 HTTP 요청의 메서드, URL 바인딩, 다음 속성을 포함할 수 있는 요청 객체라는 세 가지 매개변수를 받습니다:
-
- 경로 는 URL 바인딩의 하위 경로를 지정합니다. 이 예제에서는 /항공 로 전화를 걸려면 http://192.168.61.1:3000/api/airline
- 의 body 를 반환합니다. 제공된 객체는 다르게 지정되지 않는 한, JSON 문자열로 인코딩되고 마샬링됩니다. 인코딩 속성
- 매개변수 에는 HTTP 요청 매개변수로 전달할 키-값 쌍이 포함됩니다.
- 헤더 에는 추가 HTTP 헤더로 전달할 키-값 쌍이 포함되어 있습니다.
에서 반환된 응답 객체는 curl 함수에는 상태, 본문, HTTP 응답의 헤더가 포함됩니다. 이 함수는 연결할 수 없는 URL이나 유효하지 않은 매개변수 등 다양한 오류가 발생할 경우 예외를 발생시킵니다. 이러한 오류를 기록해야 하는 경우 호출을 try-catch 블록 안에 래핑하세요.
함수를 만든 후 이벤트 탭으로 돌아가서 함수를 배포합니다. NotifyChanges. 버킷의 전체 콘텐츠를 공급하도록 선택하면 애플리케이션에 이미 존재하는 모든 콘텐츠에 대해 알림이 전송됩니다. 항공사 문서를 작성하고 해당 ID를 기록합니다.
기능 일시 중지 및 재개
실행 중인 이벤트 함수는 일시 중지했다가 나중에 다시 시작할 수 있습니다. 함수가 다시 시작되면 일시 중지된 지점에서 이벤트를 계속 처리합니다. 일시 중지된 함수의 코드와 설정을 수정할 수 있으므로 다시 시작하면 새 버전의 함수로 추가 이벤트가 처리됩니다.
이 기능은 이미 프로덕션에 있는 이벤트 함수를 유지 관리하는 데 특히 유용합니다. 함수의 정의를 새로운 기능으로 향상시키거나 데이터 모델을 변경한 후 조정할 수 있습니다. 그러나 이러한 중도 코드 변경은 핸들러가 예약한 모든 미결 타이머 콜백과 호환되어야 합니다.
예를 들어 다음과 같은 코드를 수정하려는 경우 NotifyChanges 함수에서 이벤트 보기에서 함수를 찾은 다음 일시 중지 버튼을 클릭합니다:
함수가 일시 중지됨으로 표시될 때까지 기다립니다. 이는 이벤트 처리가 중지되었음을 의미합니다. 이 상태에서 코드와 설정을 수정할 수 있습니다. 필요한 수정을 수행한 후 기능을 다시 시작할 수 있습니다.
이 함수는 새 구현으로 다시 배포되며 중지된 지점에서 이벤트를 계속 처리합니다.
리소스
다운로드
문서
블로그
블로그 Couchbase Server 6.5 발표 - 새로운 기능 및 개선 사항
문서에서 발생한 수정 사항을 식별할 수 있는 기능이 있나요?