Couchbase Eventing Service 예제
Eventing Service는 Couchbase Server 5.5 부터 사용할 수 있는 새로운 기능입니다.
VIP고객에게 보다 신속하게 서비스를 제공하고자 합니다. 관리자는 한 명 이상의 VIP에게 할당됩니다. VIP가 야구장에 입장하면 문자 메시지가관리자에게로 전송됩니다. 관리자는 그 자리에서 VIP를만날 수 있습니다.
함수 (Eventing의 일부)를 사용하여 텍스트 메시지를 보내는 예제를만들었습니다. Twilio 의 평가판 계정을 사용 하여 메시지를 보냅니다. Twilio를 사용하여 시작하는 것은 무료이며 쉽습니다. 그래서 이벤트 기능을 알리기 위해서 예제로 사용하기로 결정했습니다. HTTP API가있는 한 원하는 메시징 / 알림 서비스 (대신)를 사용할 수 있습니다.
참고 : 컬 구성은 아직 개발 중입니다. 이 기능은 개발 목적으로 만 사용되며 프로덕션 환경에서는 사용하지 않아야 합니다.티켓 검색
첫 번째 단계는 게이트에서 고객의 티켓을 스캔하는 것입니다. 나는 이것을 시뮬레이션 하는 프로그램을 썼다. Couchbase의 "티켓"버켓에 임의의 "ticketscan"문서가 생성됩니다.
티켓을 검색하기 전에 몇 가지 데이터를 Bucket에 미리 채워야 했습니다.
고객 1 ~ 9는 VIP이고 그 외의 고객은 기타고객 이라고 결정했습니다.
1 2 3 4 5 6 7 8 9 | _bucket.Upsert("customer::1", new { Name = "George Clooney" }); _bucket.Upsert("customer::2", new { Name = "Josh Hutcherson" }); _bucket.Upsert("customer::3", new { Name = "Darius Rucker" }); _bucket.Upsert("customer::4", new { Name = "Brooklyn Decker" }); _bucket.Upsert("customer::5", new { Name = "Eddie Vedder" }); _bucket.Upsert("customer::6", new { Name = "Nick Lachey" }); _bucket.Upsert("customer::7", new { Name = "Nick Goepper" }); _bucket.Upsert("customer::8", new { Name = "Johnny Bench" }); _bucket.Upsert("customer::9", new { Name = "Ryan Collins" }); |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | _bucket.Upsert("concierge::1", new { Name = "Matt Groves", CellNumber = _yourVerifiedNumber, vips = new List<string> { "customer::1", "customer::2", "customer::9" } }); _bucket.Upsert("concierge::2", new { Name = "Mr. Redlegs", CellNumber = _yourVerifiedNumber, vips = new List<string> { "customer::3", "customer::4", "customer::5" } }); _bucket.Upsert("concierge::3", new { Name = "Rosie Red", CellNumber = _yourVerifiedNumber, vips = new List<string> { "customer::6", "customer::7", "customer::8" } }); |
위의 예에서 고객 1, 2, 9를 "Matt Groves"에게 지정합니다. 이것은 George Clooney, JoshHutcherson 및
Ryan Collins가 관리자 Matt Groves가 관리하는 VIP 인 것을 의미합니다. _yourVerifiedNumberTwilio로 확인한
전화 번호로 대체 하십시오.
또한 Twilio 자격 증명을 문서에 저장하고 있습니다. Couchbase Function 내부에 자격 증명이 필요하기 때문에 이
작업을 수행 함으로써 하드 코딩하지 않으려고 했습니다. 자격 증명 문서는 다음과 같습니다.
1 2 3 4 5 6 | { "username": "< twilio user name here >", "password": "< twilio password name here >", "fromNumber": "< twilio 'from' number here >" } |
1 2 3 4 | Console.WriteLine("1 - Simulate a VIP ticket scan."); Console.WriteLine("2 - Simulate a regular joe ticket scan."); Console.WriteLine("Q - End simulation."); var choice = Console.ReadKey().KeyChar; |
1 | _bucket.Upsert(ticketScanId, new {CustomerId = customerId, Timestamp = ticketScanTimestamp, Seat = seatInformation }); |
이벤트 함수
이 글의 핵심은 함수입니다. 이 함수를 만들 때 "notifyConcierge"라고 했습니다. "tickets_metadata" Bucket을 사용했습니다 (아래 그림 참조). 가장 중요한 것은 "tickets" Bucket의 별칭을 만들고 이를 "src"라고 했습니다. 함수 내에서 이 Bucket은 읽기 전용이지만 Twilio 자격 증명뿐만 아니라 고객 및 관리자 정보를 얻기 위해 필요합니다.
전체 기능에 Github에서 볼 수 있습니다. 다음은 함수의 분류입니다.
1 - 돌연변이 된 문서가 ticketcan 있습니까? 그럴 경우 계속하십시오. 그렇지 않은 경우 이 함수는 이를 무시할 수 있습니다.
1 | if (meta.id.indexOf("ticketscan::") !== -1) { |
2 - 스캔 한 티켓의 고객이 VIP입니까? 그렇다면 관리자세부 정보를 받아 계속 진행하십시오. 그렇지 않으면 무시하십시오. 함수의 이 부분에서 인라인 N1QL을 확인하십시오. 이것은 Couchbase 기능에 사용되는 JavaScript의 고유 한 기능입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | let customerId = doc.customerId; let stmt = SELECT t.cellNumber, t.name FROM tickets t WHERE ANY v IN t.vips SATISFIES v == $customerId END; //get the concierge (there should only be one) let concierge = null; for (var record of stmt) { concierge = record; } // only proceed with notification if // the customer has a concierge if (concierge) { |
3 - VIP의 세부 정보를 가져옵니다.
1 | let customer = src[customerId]; |
4 - Twilio 자격 증명을 가져옵니다.
1 | let twilioCredentials = src["twilio::credentials"]; |
5 - 메시지를 구성하십시오 (VIP 이름, 좌석 번호 및 관리자이름 포함). data
Twilio의 API를 사용하는 데 필요한 최소값입니다.
1 2 3 | let message = "Hello '" + concierge.name + "'. A VIP assigned to you just checked in. '" + customer.name + "' will be in '" + doc.seat + "'"; let from = twilioCredentials.fromNumber; let data = "To=" + concierge.cellNumber + "&From=" + from + "&Body=" + message; |
6 - Twilio API를 사용하여 관리자에게 문자 메시지 보내기. curl 구성은 여전히 개발 중입니다. 이 기능은 개발 목적으로 만 사용되며 프로덕션 환경에서는 사용하지 않아야 합니다.
1 2 3 | let url = twilioCredentials.url; let auth = twilioCredentials.username + ": " + twilioCredentials.password; var result = curl(url, { "data": data, "header": ["Content-Type: x-www-form-urlencoded"], "method": "POST", "auth": auth }); |
Eventing 데모 실행
이제 ticketcan 문서가 생성되거나 수정 될 때마다 관리자에 휴대 전화로 알림이 전송됩니다. 다음은 티켓 스캔에서 SMS 알림에 이르는 전체 데모의 예입니다.
이 이미지에서 4 장의 티켓 스캔을 만듭니다. 첫 번째는 VIP 용이고, 다음 두 개는 기타 그룹 용이며, 마지막은 VIP 용입니다. 두 개의 문자 메시지가 나타납니다. 실제로 이것은 다른 전화기에 표시되지만 모든 알림을 하나의 번호로 보내 테스트합니다. 참고 : join.me 를 사용하여 내 안드로이드 화면을 콘솔과 나란히 표시합니다.
어떤 문제가 발생하면 좋은 소식은 Couchbase의 함수에서 디버깅이 가능하다는 것입니다. 자바 스크립트에서 중단 점을 설정하고 Chrome과 같은 도구를 사용하여 단계별로 실행할 수 있습니다. 그것에 대한 더 자세한 내용은 Eventing 공지 사항을 확인하십시오.
출처 :Matthew Groves, 2018년 8월 6일, https://blog.couchbase.com/eventing-notification-couchbase-functions/
'IT > NoSQL' 카테고리의 다른 글
XDCR(Cross Datacenter Replication) 이해 – Part 1 (0) | 2019.01.31 |
---|