Couchbase 개발자 경험 팀은 Couchbase 사용자에게 클러스터를 위한 풍부한 오픈 소스 생태계를 제공하기 위해 최선을 다하고 있습니다. 최근에는 Couchbase Server의 최신 기능을 지원하는 Alpakka Couchbase 통합을 업데이트하기 위해 노력하고 있습니다.
업데이트된 카우치베이스 연동 기능은 알팍카 10.0.1 릴리즈의 일부로 제공됩니다. 이 게시물에서는 “여행 샘플” 데이터 세트를 사용하는 간단한 프로젝트를 검토하여 통합의 기본 사용법과 그 구성 요소에 대한 개요를 제공합니다.
추가 사용 예시를 포함하여 통합 및 API에 대한 가장 포괄적인 정보는 알팍카 문서에서 확인할 수 있습니다: https://doc.akka.io/libraries/alpakka/current/couchbase.html
전제 조건
- 여행용 샘플 버킷이 있는 카우치베이스 클러스터
- Akka CLI
- Java 21, 이클립스 애드옵티움 는 Akka 개발자가 추천하는 제품입니다.
- Apache Maven 버전 3.9 이상
- curl 명령줄 도구
- Git 또는 GitHub 데스크톱
참고: Akka 종속성은 Akka의 보안 라이브러리 리포지토리에서 사용할 수 있습니다. 이러한 라이브러리에 액세스하려면 다음에서 지정된 대로 토큰화된 안전한 URL을 사용해야 합니다. https://account.akka.io/token.
Alpakka에서 Couchbase 사용을 시연하기 위해 이 프로젝트에서는 설정에서 모든 Couchbase 클러스터에 추가할 수 있는 여행 샘플 데이터 세트를 사용합니다. 이에 대한 자세한 내용은 Сouchbase 문서에서 확인할 수 있습니다: https://docs.couchbase.com/java-sdk/current/ref/travel-app-data-model.html
샘플 프로젝트는 두 개의 엔드포인트를 구현합니다. 하나는 도시, 국가, 공항 이름 또는 국제 코드로 공항을 검색하고 다른 하나는 식별자로 공항에 대한 전체 정보를 반환합니다.
예제 프로젝트의 소스 코드는 이 URL에서 찾을 수 있습니다: https://github.com/couchbaselabs/alpakka-example
다음 명령을 사용하여 git으로 복제할 수 있습니다:
git clone https://github.com/couchbaselabs/alpakka-example.git
알파카 개요
그리고 알파카 프로젝트 은 Java 및 Scala를 위한 스트림 인식 및 반응형 통합 파이프라인을 구현하기 위한 이니셔티브입니다. 이 프로젝트는 다음을 기반으로 구축됩니다. 아카 스트림, 는 처음부터 스트리밍을 기본적으로 이해하고 반응형 및 스트림 지향 프로그래밍을 위한 DSL을 제공하도록 설계되었으며, 백압을 기본적으로 지원합니다.
Akka 스트림은 세 가지 주요 구성 요소를 중심으로 구성됩니다: 소스, 싱크, 플로우입니다. 소스는 데이터를 방출하고, 싱크는 데이터를 소비하며, 흐름은 스트림을 통해 이동하면서 데이터를 변환하여 효율적인 비동기 처리를 가능하게 합니다.
저희의 통합은 세 가지 유형의 구성 요소를 모두 제공합니다:
- CouchbaseSource 컴포넌트는 Couchbase SQL++ 쿼리를 수행하고 그 결과를 스트림의 데이터 소스로 사용합니다.
- CouchbaseFlow는 식별자로 문서를 가져오고, 문서를 삽입, 바꾸기 및 삭제합니다.
- 카우치베이스싱크는 스트림의 마지막 단계로 사용할 수 있는 유사한 카우치베이스플로우 작업 집합을 제공합니다.
알팍카-카우치베이스 구성
프로젝트 소스 코드에는 다음 파일이 포함됩니다. src/main/resources/application.conf 를 다음과 같은 카우치베이스 구성으로 사용합니다:
|
1 2 3 4 5 6 7 |
alpakka.couchbase { session { nodes = ["localhost"] username = "Administrator" password = "password" } } |
이 구성은 기본 설정을 사용하고 Alpakka 애플리케이션과 동일한 컴퓨터에서 실행되는 단일 노드 개발자 클러스터에서 작동해야 합니다. 또는 Couchbase Capella 클라우드 호스팅 클러스터에 대한 자격 증명을 사용하여 수정할 수도 있습니다. 자격 증명 및 Couchbase 연결에 대한 자세한 내용은 Couchbase Capella(https://docs.couchbase.com/cloud/get-started/connect.html) 및 카우치베이스 서버(https://docs.couchbase.com/server/current/guides/connect.html#connecting-via-client) 문서를 참조하세요.
공항 컨트롤러
구성된 카우치베이스 연결과 상호 작용하는 샘플 코드는 다음에서 찾을 수 있습니다. 공항 컨트롤러 클래스에서 src/main/java/travelsample/api/AirportController.java. 알팍카-카우치베이스 통합은 카우치베이스 세션 설정 객체를 사용하여 특정 카우치베이스 연결을 참조할 수 있습니다. 세션 설정 개체는 다른 엔드포인트와 액터 간에 재사용할 수 있으므로 컨트롤러의 생성자에서 생성되어 필드에 저장됩니다:
|
1 2 3 4 |
public AirportController(ActorSystem system) { sessionSettings = CouchbaseSessionSettings.create(system) .withEnrichAsyncCs(DiscoverySupport.getNodes(system)); } |
그리고 검색공항 메서드는 이 클래스의 /검색?쿼리= 엔드포인트와 Alpakka에서 위치 인수와 함께 SQL++를 사용하는 데모를 보여줍니다:
|
1 2 3 4 5 6 7 |
String searchTerm = requestContext().queryParams().getString("query").orElseThrow(); return CouchbaseSource.fromQuery( sessionSettings, "travel-sample", "SELECT * FROM inventory.airport where airportname LIKE '%' $1 '%' OR faa = $1 or icao = $1 or city LIKE '%' $1 '%'", QueryOptions.queryOptions().parameters(JsonArray.from(searchTerm) )).runWith(Sink.seq(), system).toCompletableFuture().get(TIMEOUT, TimeUnit.SECONDS); |
SQL++ 쿼리를 수행하려면 먼저 다음과 같은 인스턴스를 생성합니다. 카우치베이스소스 클래스를 생성하고 클러스터에 연결하는 데 필요한 정보(세션 설정), 실행하려는 쿼리, 쿼리 옵션 객체로 전달된 해당 쿼리의 인수를 사용하여 구성합니다. 위치 인자와 명명된 인자 모두 Couchbase Java SDK 설명서에 따라 지원됩니다. 쿼리 옵션 클래스.
그런 다음 Alpakka의 runSink 메서드를 사용하여 쿼리를 실행하고 그 결과를 오브젝트 스트림으로 가져옵니다.
두 번째 컨트롤러 방법, getById, 를 구현하여 /byId/{id} 엔드포인트는 공항 식별자를 가져와 해당 식별자가 있는 문서에 저장된 공항에 대한 정보를 반환합니다.
|
1 2 3 4 5 6 7 8 9 10 11 |
return Source.from(Collections.singletonList(id)) .via(CouchbaseFlow.fromId( sessionSettings, "travel-sample", "inventory", "Airport" )) .runWith(Sink.seq(), system) .thenApply(List::getFirst) .thenApply(CouchbaseDocument::getDocument) .toCompletableFuture().get(TIMEOUT, TimeUnit.SECONDS); |
알파카의 출처::에서 메서드를 요청된 식별자가 포함된 싱글톤 목록과 함께 사용하여 소스 인스턴스를 생성합니다.
그런 다음 Source.via 메서드를 사용하여 소스 Akka 스트림(이 경우 단일 식별자)을 라우팅합니다. 카우치베이스플로우 객체와 유사하게 구성된 카우치베이스소스 클래스의 검색공항 메서드. 의 인스턴스 카우치베이스플로우 는 스트림에서 요청된 식별자를 수락하고 구성된 컬렉션에서 해당 문서를 가져온 다음 스트림으로 반환하여 식별자를 다음과 같은 인스턴스로 대체합니다. 카우치베이스 문서 객체에 식별자와 관련 문서가 모두 포함되어 있습니다.
결합 카우치베이스싱크, 카우치베이스플로우, 및 기타 문서화된 Couchbase 객체를 다른 Alpakka 구성 요소의 액터와 함께 Akka 스트림의 단계로 사용하면 Couchbase를 사용하여 정보를 저장 및 가져오고 분석 및 검색을 위한 강력한 기능을 사용할 수 있는 파이프라인을 생성할 수 있습니다.
문서 및 이슈 추적
알팍카 문서(https://doc.akka.io/libraries/alpakka/current/couchbase.html)에는 다음을 포함하여 이 통합 기능 사용에 대한 자세한 정보가 포함되어 있습니다. 업서팅, 수정 그리고 삭제 문서에 저장합니다.
통합에 대한 제안이나 문제가 있는 경우 다음을 통해 공유할 수 있습니다. 알팍카 GitHub 이슈 페이지.