Couchbase 개발자 경험 팀은 Couchbase 사용자들에게 클러스터를 위한 풍부한 오픈 소스 생태계를 제공하는 데 전념하고 있습니다. 최근 당사는 Couchbase Server의 최신 기능에 대한 지원을 포함하도록 Alpakka Couchbase 연동을 업데이트하는 작업을 진행해 왔습니다.
업데이트된 카우치베이스 연동 기능이 알팍카(Alpakka) 10.0.1 릴리스의 일부로 제공됩니다. 이번 포스트에서는 “travel-sample” 데이터셋을 사용하여 이 연동 기능과 그 구성 요소들의 기본적인 사용법을 개요로 살펴볼 수 있는 간단한 프로젝트를 검토해 보겠습니다.
추가적인 사용 예시를 포함하여 통합 및 해당 API에 대한 가장 포괄적인 정보는 Alpakka 문서에서 확인할 수 있습니다. https://doc.akka.io/libraries/alpakka/current/couchbase.html
전제 조건
- travel-sample 버킷이 있는 카우치베이스 클러스터
- 아카 CLI
- 자바 21, 이클립스 어도옵시움 Akka 개발자들이 권장합니다
- 아파치 메이븐 버전 3.9 이상
- curl 명령줄 도구
- Git 또는 GitHub Desktop
참고: Akka 종속성은 Akka의 보안 라이브러리 리포지토리에서 제공됩니다. 이에 액세스하려면 에 지정된 대로 보안 토큰화된 URL을 사용해야 합니다. https://account.akka.io/token.
Alpakka에서 Couchbase 사용법을 시연하기 위해, 이 프로젝트는 설정에서 어떤 Couchbase 클러스터에든 추가할 수 있는 travel-sample 데이터셋을 사용합니다. 이에 대한 자세한 정보는 Couchbase 문서에서 확인할 수 있습니다: https://docs.couchbase.com/java-sdk/current/ref/travel-app-data-model.html
샘플 프로젝트는 두 개의 엔드포인트를 구현합니다. 그중 하나는 도시, 국가, 공항 이름 또는 국제 코드로 공항을 검색할 수 있게 하고, 다른 하나는 식별자로 공항에 대한 전체 정보를 반환합니다.
예제 프로젝트의 소스 코드는 다음 URL에서 확인하실 수 있습니다: https://github.com/couchbaselabs/alpakka-example
다음 명령어를 사용하여 git으로 복제할 수 있습니다:
깃 클론 https://github.com/couchbaselabs/alpakka-example.git
알팍카 개요
그 알팍카 프로젝트 자바와 스칼라를 위한 스트림 인식 및 반응형 통합 파이프라인을 구현하기 위한 이니셔티브입니다. 이는 다음을 기반으로 구축되었습니다. 아카 스트림즈, 그리고 처음부터 스트리밍을 네이티브로 이해하도록 설계되었으며, 배압(backpressure)에 대한 내장 지원을 통해 반응형 및 스트림 지향 프로그래밍을 위한 DSL을 제공합니다.
아카 스트림(Akka Streams)은 소스(Source), 싱크(Sink), 플로우(Flow)라는 세 가지 주요 컴포넌트를 중심으로 구조화되어 있습니다. 소스는 데이터를 방출하고, 싱크는 데이터를 소비하며, 플로우는 스트림을 통과하는 데이터를 변환하여 효율적이고 비동기적인 처리를 가능하게 합니다.
저희 연동은 세 가지 유형의 컴포넌트를 모두 제공합니다.
- CouchbaseSource 컴포넌트는 Couchbase SQL++ 쿼리를 실행하고 그 결과를 스트림의 데이터 소스로 사용합니다.
- CouchbaseFlow는 식별자로 문서를 가져오며, 문서의 업서트, 대체 및 삭제도 수행합니다.
- CouchbaseSink는 스트림의 마지막 단계로 사용할 수 있는 유사한 CouchbaseFlow 연산 세트를 제공합니다.
알파카-카우치베이스 설정
프로젝트 소스 코드는 파일을 포함하고 있습니다 src/main/resources/application.conf 다음 카우치베이스(Couchbase) 설정으로:
|
1 2 3 4 5 6 7 |
알파카.카우치베이스 { 세션 { 노드 = [“로컬호스트”] 사용자 이름 = “관리자” 비밀번호 = “비밀번호” } } |
이 구성은 기본 설정을 사용하고 Alpakka 애플리케이션과 동일한 컴퓨터에서 실행되는 단일 노드 개발자 클러스터에서 작동해야 합니다. 또는 Couchbase Capella 클라우드 호스팅 클러스터에 대한 자격 증명으로 수정할 수 있습니다. 자격 증명 및 Couchbase 연결에 대한 자세한 내용은 Couchbase Capella에서 확인할 수 있습니다 (https://docs.couchbase.com/cloud/get-started/connect.html) 및 Couchbase Server (https://docs.couchbase.com/server/current/guides/connect.html#connecting-via-client) 문서.
공항 관제사
설정된 Couchbase 연결과 상호 작용하는 예제 코드는 다음에서 확인할 수 있습니다: 공항제어기 위치한, 클래스 src/main/java/travelsample/api/AirportController.java. The Alpakka-Couchbase integration uses CouchbaseSessionSettings 특정 Couchbase 연결을 참조하는 객체입니다. 세션 설정 객체는 서로 다른 엔드포인트와 액터 간에 재사용할 수 있으므로, 컨트롤러의 생성자에서 생성되어 필드에 저장됩니다.
|
1 2 3 4 |
공공의 공항제어기(액터시스템 시스템) { 세션 설정 = CouchbaseSessionSettings.만들다(시스템) .withEnrichAsyncCs(디스커버리 지원.노드 가져오기(시스템)); } |
그 공항검색 이 클래스의 메서드는 다음을 구현합니다 /search?query= 알파카(Alpakka)에서 위치 인자(positional argument)와 함께 SQL++을 사용하는 엔드포인트와 그 시연:
|
1 2 3 4 5 6 7 |
문자열 검색어 = 요청 컨텍스트().쿼리 매개변수().문자열가져오기(“질의”).orElseThrow(); 반환 카우치베이스소스.쿼리에서( 세션 설정, “트래블 샘플”, “SELECT * FROM inventory.airport WHERE airportname LIKE ‘%’ $1 ‘%’ OR faa = $1 OR icao = $1 OR city LIKE ‘%’ $1 ‘%'', 쿼리 옵션.쿼리 옵션().매개변수(JSON 배열.에서(검색어) )).runWith(싱크대.seq(), 시스템).toCompletableFuture().얻다(시간 초과, 시간 단위.초); |
SQL++ 쿼리를 실행하려면 먼저 인스턴스를 생성해야 합니다. 카우치베이스소스 클래스를 생성하고 클러스터에 연결하는 데 필요한 정보(sessionSettings), 실행하려는 쿼리, 그리고 QueryOptions 객체로 전달되는 해당 쿼리의 인수를 사용하여 구성합니다. Couchbase Java SDK 문서에 따르면 위치 기반 인수와 이름 기반 인수 모두 지원됩니다. 쿼리 옵션 클래스.
그런 다음, 우리는 알팍카의 싱크 실행 생성된 소스의 메서드를 실행하여 쿼리를 실행하고 그 결과를 객체 스트림으로 가져옵니다.
두 번째 컨트롤러 메서드, ID로 조회, 구현합니다 /byId/{id} 공항 식별자를 받아 해당 식별자를 가진 문서에 저장된 공항 정보를 반환하는 엔드포인트.
|
1 2 3 4 5 6 7 8 9 10 11 |
반환 출처.에서(컬렉션.싱글턴리스트(아이디)) .~을 통해(카우치베이스플로우.보낸사람ID( 세션 설정, “트래블 샘플”, “재고”, “공항” )) .runWith(싱크대.seq(), 시스템) .thenApply(목록::첫 번째 가져오기) .thenApply(카우치베이스문서::getDocument) .toCompletableFuture().얻다(시간 초과, 시간 단위.초); |
We can use Alpakka’s Source::from method with a singleton list containing the requested identifier to create a source instance.
Then we use the Source.via method to route the source Akka stream (in this case of a single identifier) through a 카우치베이스플로우 object that is configured similarly to the 카우치베이스소스 class in the 공항검색 method. The instance of 카우치베이스플로우 will accept the requested identifier from the stream, fetch the corresponding document from the configured collection, and return it to the stream, replacing the identifier with an instance of 카우치베이스문서 object, which contains both the identifier and associated document.
Combining CouchbaseSink, 카우치베이스플로우, and other documented Couchbase objects as steps in the Akka streams together with actors from other Alpakka components allows for the creation of pipelines that can use Couchbase to store and fetch information, as well as use its powerful features for analytics and search.
Documentation and issue tracking
The Alpakka documentation (https://doc.akka.io/libraries/alpakka/current/couchbase.html) contains more information about using this integration, including upserting, modifying 그리고 deleting documents in a Couchbase cluster.
Any suggestions about the integration or issues with it can be shared via the Alpakka GitHub Issues page.

댓글 남기기
댓글을 달기 위해서는 로그인해야합니다.