Azure Storage Blob
Azure Storage Blob (camel-azure-storage-blob)
Azure Storage Blob 컴포넌트는 Azure APIs v12를 사용해 Azure Storage Blob 서비스에 blob을 저장하고 읽어 오는 컴포넌트예요. 컨슈머로는 컨테이너에서 blob을 폴링해 가져오고, 프로듀서로는 목록 조회부터 업로드·다운로드, 스냅샷·태그·불변성 정책까지 폭넓은 연산을 제공해요. 이 문서에서는 URI 형식, 컴포넌트·엔드포인트 옵션, 메시지 헤더, 프로듀서 연산과 사용 예제를 차례로 살펴봐요.
출처: 문서
본문
Azure Storage Blob Service
Camel 3.3부터 지원
프로듀서와 컨슈머를 모두 지원해요
Azure Storage Blob 컴포넌트는 Azure APIs v12를 사용해서 Azure Storage Blob 서비스에 blob을 저장하고 읽어 오는 데 쓰여요. 다만 v12보다 위 버전에 대해서는, 결과적으로 얼마나 큰 breaking change가 생기는지에 따라 이 컴포넌트가 그 변경 사항을 받아들일 수 있을지 보게 됩니다.
사전 준비 사항 (Prerequisites)
유효한 Windows Azure Storage 계정이 있어야 해요. 자세한 정보는 Azure Documentation Portal에서 확인할 수 있어요.
Maven 사용자는 이 컴포넌트를 쓰려면 pom.xml에 다음 의존성을 추가해야 해요:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-azure-storage-blob</artifactId>
<version>x.x.x</version>
<!-- use the same version as your Camel core version -->
</dependency>
URI 형식 (URI Format)
azure-storage-blob://accountName[/containerName][?options]
컨슈머의 경우 accountName, containerName이 필수예요.
프로듀서의 경우 요청하는 연산에 따라 달라져요. 예를 들어 연산이 컨테이너 수준이면(e.g: createContainer) accountName과 containerName만 필요하고, 연산이 blob 수준이면(e.g: getBlob) accountName, containerName, blobName이 필요해요.
blob이 아직 없으면 새로 만들어져요. 다음 형식으로 URI에 쿼리 옵션을 붙일 수 있어요: ?options=value&option2=value&…
옵션 설정 (Configuring Options)
Camel 컴포넌트는 두 단계로 나눠 설정합니다:
-
컴포넌트(component) 레벨
-
엔드포인트(endpoint) 레벨
컴포넌트 옵션 설정 (Configuring Component Options)
컴포넌트 레벨에서는 엔드포인트들이 물려받는 일반·공통 설정을 정해요. 설정 계층 중 가장 위에 해당합니다.
예를 들어 컴포넌트에는 보안 설정, 인증용 자격 증명, 네트워크 연결 URL 같은 것들이 들어가죠.
컴포넌트마다 옵션이 몇 개뿐인 경우도 있고 많은 경우도 있어요. 컴포넌트는 보통 널리 쓰는 기본값을 이미 갖고 있어서, 옵션을 몇 개만 설정하거나 아예 안 건드려도 되는 경우가 많습니다.
컴포넌트 설정 방법은 이렇게 있어요:
-
설정 파일(
application.properties,*.yaml파일 등). -
Java 코드에서 직접.
엔드포인트 옵션 설정 (Configuring Endpoint Options)
보통은 옵션이 많은 엔드포인트 설정에 더 많은 시간을 쓰게 돼요. 이 옵션들은 엔드포인트가 하길 원하는 동작을 원하는 대로 바꿀 수 있게 해 줘요. 옵션은 엔드포인트가 컨슈머(from)로 쓰이는지, 프로듀서(to)로 쓰이는지, 둘 다인지에 따라 분류되기도 해요.
엔드포인트 설정은 대부분 엔드포인트 URI에 _path_와 query 파라미터로 바로 하는 경우가 많아요. Endpoint DSL과 DataFormat DSL을 쓰면 Java에서 엔드포인트와 데이터 포맷을 _타입 세이프_하게 설정할 수도 있어요.
옵션을 설정할 때 좋은 습관은 Property Placeholders를 쓰는 거예요.
프로퍼티 플레이스홀더는 이런 장점이 있어요:
-
URL, 포트 번호, 민감한 정보 같은 설정을 하드코딩하지 않도록 도와줘요.
-
설정을 코드 밖으로 분리할 수 있게 해 줘요.
-
코드를 더 유연하고 재사용하기 쉽게 만들어 줘요.
다음 두 섹션에서 모든 옵션을 나열해요. 먼저 컴포넌트 옵션이고, 그다음이 엔드포인트예요.
컴포넌트 옵션 (Component Options)
Azure Storage Blob Service 컴포넌트는 아래 나열된 옵션들을 지원해요.
| Name | Description | Default | Type |
|---|---|---|---|
| blobName (common) | 컨테이너에서 특정 blob을 소비할 때 쓰는 blob 이름이에요. 다만 프로듀서에서는 blob 수준 연산에만 필요해요. | String | |
| blobOffset (common) | 업로드나 다운로드 연산에 쓸 blob 오프셋을 설정해요. 기본값은 0이에요. | 0 | long |
| blobType (common) | |||
| 각 blob 타입에 맞는 설정을 초기화할 때 쓰는 blob 타입이에요. |
Enum values:
-
blockblob
-
appendblob
-
pageblob
| blockblob | BlobType | | closeStreamAfterRead (common) | 읽은 후에 스트림을 닫을지 열어 둘지 정해요. 기본값은 true예요. | true | boolean | | configuration (common) | 컴포넌트 설정이에요. | | BlobConfiguration | | credentials (common) | Autowired Azure 클라이언트를 만들 때 StorageSharedKeyCredential을 주입할 수 있고, 여기에는 중요한 인증 정보가 들어 있어요. | | StorageSharedKeyCredential | | credentialType (common) |
채택할 자격 증명(credential) 전략을 결정해요.
Enum values:
-
SHARED_ACCOUNT_KEY
-
SHARED_KEY_CREDENTIAL
-
AZURE_IDENTITY
-
AZURE_SAS
| AZURE_IDENTITY | CredentialType | | dataCount (common) | 범위에 몇 바이트를 포함할지 정해요. 지정한다면 0보다 크거나 같아야 해요. | | Long | | fileDir (common) | 다운로드한 blob을 저장할 파일 디렉터리예요. 프로듀서와 컨슈머 양쪽에서 쓸 수 있어요. | | String | | leaseBlob (common) | blob에 접근할 때 lease를 획득할지 설정해요. true로 하면 배타적 접근이 필요한 blob 연산을 수행하기 전에 컴포넌트가 lease를 획득해요. | false | boolean | | leaseDurationInSeconds (common) | lease 기간을 초 단위로 설정해요. 무한 lease는 -1을, 고정 lease는 15에서 60 사이 값을 쓰세요. | 60 | Integer | | maxResultsPerPage (common) | BlobPrefix 요소를 모두 포함해 돌려 받을 blob의 최대 개수를 지정해요. 요청에서 maxResultsPerPage를 지정하지 않거나 5,000보다 큰 값을 지정하면 서버는 최대 5,000개까지 돌려 줘요. | | Integer | | maxRetryRequests (common) | 응답 본문에서 데이터를 읽는 동안 추가로 수행할 HTTP GET 요청의 최대 횟수를 지정해요. | 0 | int | | prefix (common) | 지정한 접두사로 이름이 시작하는 blob만 돌려 받도록 결과를 걸러 줘요. 모든 blob을 돌려 받으려면 null이면 돼요. | | String | | regex (common) | 지정한 정규식과 이름이 일치하는 blob만 돌려 받도록 결과를 걸러 줘요. 모두 돌려 받으려면 null이면 돼요. prefix와 regex를 둘 다 설정하면 regex가 우선하고 prefix는 무시돼요. | | String | | serviceClient (common) | Autowired 스토리지 계정 클라이언트예요. 이 클라이언트는 특정 스토리지 계정에 대한 상태를 갖고 있지 않고, 대신 서비스의 리소스에 적절한 요청을 보내는 편리한 수단이에요. blob과 컨테이너의 URL을 만드는 데도 쓸 수 있어요. 이 클라이언트에는 서비스 계정에 대한 연산이 들어 있고, 컨테이너 연산은 BlobServiceClient#getBlobContainerClient(String)로 BlobContainerClient에서, blob 연산은 BlobContainerClient#getBlobClient(String)로 BlobClient에서 쓸 수 있어요. | | BlobServiceClient | | snapshotId (common) | 읽기 연산(getBlob, downloadBlobToFile, downloadLink)에서 특정 blob 스냅샷을 대상으로 삼을 때 쓰는 스냅샷 식별자예요. 설정하면 라이브 blob 대신 스냅샷 범위로 한정된 클라이언트를 대상으로 읽어요. CamelAzureStorageBlobSnapshotId 헤더로 exchange별로 제공할 수도 있어요. | | String | | timeout (common) | 선택 사항인 타임아웃 값이에요. 이 시간을 넘기면 RuntimeException이 발생해요. | | Duration | | versionId (common) | 읽기 연산(getBlob, downloadBlobToFile, downloadLink)에서 특정 blob 버전을 대상으로 삼을 때 쓰는 버전 식별자예요. 스토리지 계정에서 blob 버저닝이 켜져 있어야 해요. 설정하면 라이브 blob 대신 버전 범위로 한정된 클라이언트를 대상으로 읽어요. CamelAzureStorageBlobVersionId 헤더로 exchange별로 제공할 수도 있어요. | | String | | bridgeErrorHandler (consumer) | 컨슈머를 Camel 라우팅 에러 핸들러(Error Handler)에 브리지할 수 있게 해 줘요. 즉, Camel 컨슈머가 들어오는 메시지를 집어 올리는 동안 등에서 예외가 발생하면(가능한 경우), 그 예외를 메시지로 처리해서 라우팅 에러 핸들러가 다루게 돼요. 중요: 이것은 서드파티 컴포넌트가 예외가 던져졌을 때 Camel에 알릴 수 있도록 허용하는 경우에만 가능해요. 일부 컴포넌트는 내부에서만 처리하기 때문에 bridgeErrorHandler를 쓸 수 없어요. 다른 상황에서는 Camel 컴포넌트를 개선해서 서드파티 컴포넌트에 연결(hook)해 이를 가능하게 만들 수도 있어요. 기본으로 컨슈머는 org.apache.camel.spi.ExceptionHandler로 예외를 처리하는데, WARN 또는 ERROR 레벨로 로그를 남기고 무시해요. | false | boolean | | deleteAfterRead (consumer) | 가져온 blob을 Azure에서 삭제해요. 삭제는 Exchange가 커밋됐을 때만 수행되고, 롤백이 일어나면 blob은 삭제되지 않아요. 이 옵션이 false면 폴링할 때마다 같은 blob이 계속 다시 조회돼요. 그래서 중복을 걸러 내려면 라우트에 Idempotent Consumer EIP를 써야 해요. BlobConstants#BLOB_NAME 헤더로 걸러 내거나 blob 이름만으로 걸러 낼 수 있어요. | false | boolean | | destinationBlobPrefix (consumer) | blob을 이동해야 하고 moveAfterRead가 true로 설정돼 있을 때 쓸 대상 blob 접두사를 정해요. | | String | | destinationBlobSuffix (consumer) | blob을 이동해야 하고 moveAfterRead가 true로 설정돼 있을 때 쓸 대상 blob 접미사를 정해요. | | String | | destinationContainer (consumer) | moveAfterRead가 true로 설정돼 있을 때 blob을 이동시킬 대상 컨테이너를 정해요. | | String | | moveAfterRead (consumer) | 가져온 blob을 컨테이너에서 다른 컨테이너로 이동해요. 이 연산을 하려면 destinationContainer 옵션을 설정해야 해요. blob 복사 연산은 Exchange가 커밋됐을 때만 수행되고, 롤백이 일어나면 blob은 이동하지 않아요. | false | boolean | | removePrefixOnMove (consumer) | 이동하기 전에 새 blob 이름에서 prefix 설정 문자열 내용을 제거해요. 예를 들어 prefix가 'notify/'로, destinationBlobPrefix가 'archive/'로 설정돼 있으면 'notify/example.txt'라는 blob은 기본 동작인 'archive/notify/example.txt'가 아니라 'archive/example.txt'로 이동해요. moveAfterRead가 true일 때만 적용돼요. | false | boolean | | blobSequenceNumber (producer) | 요청을 추적할 때 쓸 수 있는 사용자 지정 값이에요. 시퀀스 번호 값은 0에서 263 - 1 사이여야 해요. 기본값은 0이에요. | 0 | Long | | blockListType (producer) |
돌려 받을 블록 타입을 지정해요.
Enum values:
-
committed
-
uncommitted
-
all
| COMMITTED | BlockListType | | blockSize (producer) | uploadBlockBlobChunked 연산으로 청크 업로드를 할 때 쓰는 블록 크기(바이트)예요. 기본값은 4MB(4194304)이고, 최대는 4000MB예요. 0보다 커야 해요. | | Long | | changeFeedContext (producer) | getChangeFeed 프로듀서 연산을 쓸 때 서비스 호출 중 Http 파이프라인을 통해 전달되는 추가 컨텍스트를 지정해요. | | Context | | changeFeedEndTime (producer) | getChangeFeed 프로듀서 연산을 쓸 때 종료 시각 이전의 이벤트를 대략적으로 돌려 받도록 결과를 걸러 줘요. 참고: 다음 시간대(hour)에 속한 몇몇 이벤트도 함께 돌아올 수 있고, 이 시간대의 이벤트 일부가 빠질 수도 있어요. 해당 시간대의 모든 이벤트를 확실히 받으려면 종료 시각을 1시간 올려서 지정하세요. | | OffsetDateTime | | changeFeedStartTime (producer) | getChangeFeed 프로듀서 연산을 쓸 때 시작 시각 이후의 이벤트를 대략적으로 돌려 받도록 결과를 걸러 줘요. 참고: 이전 시간대(hour)에 속한 몇몇 이벤트도 함께 돌아올 수 있고, 이 시간대의 이벤트 일부가 빠질 수도 있어요. 해당 시간대의 모든 이벤트를 확실히 받으려면 시작 시각을 1시간 내려서 지정하세요. | | OffsetDateTime | | closeStreamAfterWrite (producer) | 쓴 후에 스트림을 닫을지 열어 둘지 정해요. 기본값은 true예요. | true | boolean | | commitBlockListLater (producer) | true로 설정하면 스테이징된 블록이 바로 커밋되지 않아요. | true | boolean | | createAppendBlob (producer) | true로 설정하면 append 블록을 커밋할 때 append 블록이 생성돼요. | true | boolean | | createPageBlob (producer) | true로 설정하면 page blob을 업로드할 때 page blob이 생성돼요. | true | boolean | | downloadLinkExpiration (producer) | URL 다운로드 링크의 기본 만료 시간(밀리초)을 덮어써요. | | Long | | lazyStartProducer (producer) | producer를 lazy(첫 메시지 시점)로 시작할지 여부예요. lazy 시작을 쓰면 producer가 시작 중 실패해서 라우트 시작이 실패하는 상황에서도 CamelContext와 라우트를 시작할 수 있고, 시작 실패 처리를 Camel의 라우팅 에러 핸들러로 넘길 수 있어요. 다만 첫 메시지를 처리하는 시점에 producer를 만들고 시작하는 데 시간이 조금 걸려서 전체 처리 시간이 길어질 수 있다는 점은 유의하세요. | false | boolean | | maxConcurrency (producer) | uploadBlockBlobChunked 연산으로 업로드하는 동안 사용할 최대 병렬 요청 수예요. 기본값은 사용 가능한 프로세서를 기준으로 Azure SDK가 정해요. | | Integer | | maxSingleUploadSize (producer) | uploadBlockBlobChunked 연산에서 단일 업로드 요청의 최대 크기(바이트)예요. 이보다 작은 파일은 한 번의 요청으로 업로드되고, 더 큰 파일은 blockSize 크기의 블록으로 청크 업로드를 써요. 기본값은 256MB예요. | | Long | | operation (producer) |
프로듀서에서 이 컴포넌트와 함께 쓸 수 있는 blob 연산이에요.
Enum values:
-
listBlobContainers
-
findBlobsByTags
-
createBlobContainer
-
deleteBlobContainer
-
listBlobs
-
listBlobVersions
-
getBlob
-
deleteBlob
-
downloadBlobToFile
-
downloadLink
-
uploadBlockBlob
-
uploadBlockBlobChunked
-
stageBlockBlobList
-
commitBlobBlockList
-
getBlobBlockList
-
createAppendBlob
-
commitAppendBlob
-
createPageBlob
-
uploadPageBlob
-
resizePageBlob
-
clearPageBlob
-
getPageBlobRanges
-
getChangeFeed
-
copyBlob
-
createBlobSnapshot
-
setBlobTags
-
getBlobTags
-
setBlobLegalHold
-
setBlobImmutabilityPolicy
-
undeleteBlob
-
setBlobTier
| listBlobContainers | BlobOperationsDefinition | | pageBlobSize (producer) | page blob의 최대 크기를 지정해요. 최대 8TB까지 가능해요. page blob 크기는 512바이트 경계에 맞아야 해요. | 512 | Long | | autowiredEnabled (advanced) | autowiring을 켤지 여부예요. 레지스트리에서 일치하는 타입의 인스턴스가 단 하나 있는지 찾아서 자동으로 autowiring 옵션(옵션이 autowired로 표시돼 있어야 해요)을 구성하는 데 쓰여요. JDBC 데이터 소스, JMS 커넥션 팩토리, AWS 클라이언트 등을 자동 구성할 수 있어요. | true | boolean | | healthCheckConsumerEnabled (health) | 이 컴포넌트의 컨슈머 기반 health check을 모두 켜거나 끄는 데 쓰여요. | true | boolean | | healthCheckProducerEnabled (health) | 이 컴포넌트의 프로듀서 기반 health check을 모두 켜거나 끄는 데 쓰여요. 참고: Camel은 기본으로 프로듀서 기반 health check을 모두 꺼 두었어요. camel.health.producersEnabled=true로 설정하면 프로듀서 체크를 전역으로 켤 수 있어요. | true | boolean | | accessKey (security) | Azure blob 서비스 인증에 쓸, 연결된 Azure 계정 이름의 액세스 키예요. | | String | | azureClientId (security) | Azure Identity 인증에 쓰는 Azure Client ID예요. | | String | | azureClientSecret (security) | Azure Identity 인증에 쓰는 Azure Client Secret이에요. | | String | | azureTenantId (security) | Azure Identity 인증에 쓰는 Azure Tenant ID예요. | | String | | sasToken (security) | Shared Access Signature를 사용한다면 SAS 토큰을 설정해야 해요. | | String | | sourceBlobAccessKey (security) | 소스 Blob 액세스 키: copyblob 연산을 하려면 안타깝게도 복사하려는 소스 blob의 accessKey가 필요해요. accessKey를 헤더로 넘기는 건 안전하지 않아서 key로 설정할 수 있어요. | | String |
엔드포인트 옵션 (Endpoint Options)
Azure Storage Blob Service 엔드포인트는 URI 문법으로 설정해요:
azure-storage-blob:accountName/containerName
다음 _path_와 query 파라미터를 쓸 수 있어요:
경로 파라미터 (Path Parameters)
| Name | Description | Default | Type |
|---|---|---|---|
| accountName (common) | Azure blob 서비스 인증에 쓸 Azure 계정 이름이에요. | String | |
| containerName (common) | blob 컨테이너 이름이에요. | String |
쿼리 파라미터 (Query Parameters)
| Name | Description | Default | Type |
|---|---|---|---|
| blobName (common) | 컨테이너에서 특정 blob을 소비할 때 쓰는 blob 이름이에요. 다만 프로듀서에서는 blob 수준 연산에만 필요해요. | String | |
| blobOffset (common) | 업로드나 다운로드 연산에 쓸 blob 오프셋을 설정해요. 기본값은 0이에요. | 0 | long |
| blobServiceClient (common) | 스토리지 계정 클라이언트예요. 이 클라이언트는 특정 스토리지 계정에 대한 상태를 갖고 있지 않고, 대신 서비스의 리소스에 적절한 요청을 보내는 편리한 수단이에요. blob과 컨테이너의 URL을 만드는 데도 쓸 수 있어요. 이 클라이언트에는 서비스 계정에 대한 연산이 들어 있고, 컨테이너 연산은 getBlobContainerClient(String)로 BlobContainerClient에서, blob 연산은 getBlobContainerClient(String).getBlobClient(String)로 BlobClient에서 쓸 수 있어요. | BlobServiceClient | |
| blobType (common) | |||
| 각 blob 타입에 맞는 설정을 초기화할 때 쓰는 blob 타입이에요. |
Enum values:
-
blockblob
-
appendblob
-
pageblob
| blockblob | BlobType | | closeStreamAfterRead (common) | 읽은 후에 스트림을 닫을지 열어 둘지 정해요. 기본값은 true예요. | true | boolean | | credentials (common) | Autowired Azure 클라이언트를 만들 때 StorageSharedKeyCredential을 주입할 수 있고, 여기에는 중요한 인증 정보가 들어 있어요. | | StorageSharedKeyCredential | | credentialType (common) |
채택할 자격 증명(credential) 전략을 결정해요.
Enum values:
-
SHARED_ACCOUNT_KEY
-
SHARED_KEY_CREDENTIAL
-
AZURE_IDENTITY
-
AZURE_SAS
| AZURE_IDENTITY | CredentialType | | dataCount (common) | 범위에 몇 바이트를 포함할지 정해요. 지정한다면 0보다 크거나 같아야 해요. | | Long | | fileDir (common) | 다운로드한 blob을 저장할 파일 디렉터리예요. 프로듀서와 컨슈머 양쪽에서 쓸 수 있어요. | | String | | leaseBlob (common) | blob에 접근할 때 lease를 획득할지 설정해요. true로 하면 배타적 접근이 필요한 blob 연산을 수행하기 전에 컴포넌트가 lease를 획득해요. | false | boolean | | leaseDurationInSeconds (common) | lease 기간을 초 단위로 설정해요. 무한 lease는 -1을, 고정 lease는 15에서 60 사이 값을 쓰세요. | 60 | Integer | | maxResultsPerPage (common) | BlobPrefix 요소를 모두 포함해 돌려 받을 blob의 최대 개수를 지정해요. 요청에서 maxResultsPerPage를 지정하지 않거나 5,000보다 큰 값을 지정하면 서버는 최대 5,000개까지 돌려 줘요. | | Integer | | maxRetryRequests (common) | 응답 본문에서 데이터를 읽는 동안 추가로 수행할 HTTP GET 요청의 최대 횟수를 지정해요. | 0 | int | | prefix (common) | 지정한 접두사로 이름이 시작하는 blob만 돌려 받도록 결과를 걸러 줘요. 모든 blob을 돌려 받으려면 null이면 돼요. | | String | | regex (common) | 지정한 정규식과 이름이 일치하는 blob만 돌려 받도록 결과를 걸러 줘요. 모두 돌려 받으려면 null이면 돼요. prefix와 regex를 둘 다 설정하면 regex가 우선하고 prefix는 무시돼요. | | String | | serviceClient (common) | Autowired 스토리지 계정 클라이언트예요. 이 클라이언트는 특정 스토리지 계정에 대한 상태를 갖고 있지 않고, 대신 서비스의 리소스에 적절한 요청을 보내는 편리한 수단이에요. blob과 컨테이너의 URL을 만드는 데도 쓸 수 있어요. 이 클라이언트에는 서비스 계정에 대한 연산이 들어 있고, 컨테이너 연산은 BlobServiceClient#getBlobContainerClient(String)로 BlobContainerClient에서, blob 연산은 BlobContainerClient#getBlobClient(String)로 BlobClient에서 쓸 수 있어요. | | BlobServiceClient | | snapshotId (common) | 읽기 연산(getBlob, downloadBlobToFile, downloadLink)에서 특정 blob 스냅샷을 대상으로 삼을 때 쓰는 스냅샷 식별자예요. 설정하면 라이브 blob 대신 스냅샷 범위로 한정된 클라이언트를 대상으로 읽어요. CamelAzureStorageBlobSnapshotId 헤더로 exchange별로 제공할 수도 있어요. | | String | | timeout (common) | 선택 사항인 타임아웃 값이에요. 이 시간을 넘기면 RuntimeException이 발생해요. | | Duration | | versionId (common) | 읽기 연산(getBlob, downloadBlobToFile, downloadLink)에서 특정 blob 버전을 대상으로 삼을 때 쓰는 버전 식별자예요. 스토리지 계정에서 blob 버저닝이 켜져 있어야 해요. 설정하면 라이브 blob 대신 버전 범위로 한정된 클라이언트를 대상으로 읽어요. CamelAzureStorageBlobVersionId 헤더로 exchange별로 제공할 수도 있어요. | | String | | deleteAfterRead (consumer) | 가져온 blob을 Azure에서 삭제해요. 삭제는 Exchange가 커밋됐을 때만 수행되고, 롤백이 일어나면 blob은 삭제되지 않아요. 이 옵션이 false면 폴링할 때마다 같은 blob이 계속 다시 조회돼요. 그래서 중복을 걸러 내려면 라우트에 Idempotent Consumer EIP를 써야 해요. BlobConstants#BLOB_NAME 헤더로 걸러 내거나 blob 이름만으로 걸러 낼 수 있어요. | false | boolean | | destinationBlobPrefix (consumer) | blob을 이동해야 하고 moveAfterRead가 true로 설정돼 있을 때 쓸 대상 blob 접두사를 정해요. | | String | | destinationBlobSuffix (consumer) | blob을 이동해야 하고 moveAfterRead가 true로 설정돼 있을 때 쓸 대상 blob 접미사를 정해요. | | String | | destinationContainer (consumer) | moveAfterRead가 true로 설정돼 있을 때 blob을 이동시킬 대상 컨테이너를 정해요. | | String | | moveAfterRead (consumer) | 가져온 blob을 컨테이너에서 다른 컨테이너로 이동해요. 이 연산을 하려면 destinationContainer 옵션을 설정해야 해요. blob 복사 연산은 Exchange가 커밋됐을 때만 수행되고, 롤백이 일어나면 blob은 이동하지 않아요. | false | boolean | | removePrefixOnMove (consumer) | 이동하기 전에 새 blob 이름에서 prefix 설정 문자열 내용을 제거해요. 예를 들어 prefix가 'notify/'로, destinationBlobPrefix가 'archive/'로 설정돼 있으면 'notify/example.txt'라는 blob은 기본 동작인 'archive/notify/example.txt'가 아니라 'archive/example.txt'로 이동해요. moveAfterRead가 true일 때만 적용돼요. | false | boolean | | sendEmptyMessageWhenIdle (consumer) | 폴링 컨슈머가 아무 파일도 폴링하지 못했을 때 이 옵션을 켜면 대신 빈 메시지(바디 없음)를 보내요. | false | boolean | | bridgeErrorHandler (consumer (advanced)) | 컨슈머를 Camel 라우팅 에러 핸들러(Error Handler)에 브리지할 수 있게 해 줘요. 즉, Camel 컨슈머가 들어오는 메시지를 집어 올리는 동안 등에서 예외가 발생하면(가능한 경우), 그 예외를 메시지로 처리해서 라우팅 에러 핸들러가 다루게 돼요. 중요: 이것은 서드파티 컴포넌트가 예외가 던져졌을 때 Camel에 알릴 수 있도록 허용하는 경우에만 가능해요. 일부 컴포넌트는 내부에서만 처리하기 때문에 bridgeErrorHandler를 쓸 수 없어요. 다른 상황에서는 Camel 컴포넌트를 개선해서 서드파티 컴포넌트에 연결(hook)해 이를 가능하게 만들 수도 있어요. 기본으로 컨슈머는 org.apache.camel.spi.ExceptionHandler로 예외를 처리하는데, WARN 또는 ERROR 레벨로 로그를 남기고 무시해요. | false | boolean | | exceptionHandler (consumer (advanced)) | 컨슈머가 커스텀 ExceptionHandler를 쓰게 할 수 있어요. 참고로 bridgeErrorHandler 옵션이 켜져 있으면 이 옵션은 사용되지 않아요. 기본으로 컨슈머는 예외를 직접 처리하며, WARN 또는 ERROR 레벨로 로그를 남기고 무시해요. | | ExceptionHandler | | exchangePattern (consumer (advanced)) |
컨슈머가 exchange를 만들 때 exchange 패턴을 설정해요.
Enum values:
-
InOnly
-
InOut
| | ExchangePattern | | pollStrategy (consumer (advanced)) | Exchange가 만들어지고 Camel에서 라우팅되기 전에 폴링 연산 중에 보통 일어나는 에러 처리를 제어할 수 있는 커스텀 구현을 제공하게 해 주는, 플러그인 가능한 org.apache.camel.PollingConsumerPollStrategy예요. | | PollingConsumerPollStrategy | | blobSequenceNumber (producer) | 요청을 추적할 때 쓸 수 있는 사용자 지정 값이에요. 시퀀스 번호 값은 0에서 263 - 1 사이여야 해요. 기본값은 0이에요. | 0 | Long | | blockListType (producer) |
돌려 받을 블록 타입을 지정해요.
Enum values:
-
committed
-
uncommitted
-
all
| COMMITTED | BlockListType | | blockSize (producer) | uploadBlockBlobChunked 연산으로 청크 업로드를 할 때 쓰는 블록 크기(바이트)예요. 기본값은 4MB(4194304)이고, 최대는 4000MB예요. 0보다 커야 해요. | | Long | | changeFeedContext (producer) | getChangeFeed 프로듀서 연산을 쓸 때 서비스 호출 중 Http 파이프라인을 통해 전달되는 추가 컨텍스트를 지정해요. | | Context | | changeFeedEndTime (producer) | getChangeFeed 프로듀서 연산을 쓸 때 종료 시각 이전의 이벤트를 대략적으로 돌려 받도록 결과를 걸러 줘요. 참고: 다음 시간대(hour)에 속한 몇몇 이벤트도 함께 돌아올 수 있고, 이 시간대의 이벤트 일부가 빠질 수도 있어요. 해당 시간대의 모든 이벤트를 확실히 받으려면 종료 시각을 1시간 올려서 지정하세요. | | OffsetDateTime | | changeFeedStartTime (producer) | getChangeFeed 프로듀서 연산을 쓸 때 시작 시각 이후의 이벤트를 대략적으로 돌려 받도록 결과를 걸러 줘요. 참고: 이전 시간대(hour)에 속한 몇몇 이벤트도 함께 돌아올 수 있고, 이 시간대의 이벤트 일부가 빠질 수도 있어요. 해당 시간대의 모든 이벤트를 확실히 받으려면 시작 시각을 1시간 내려서 지정하세요. | | OffsetDateTime | | closeStreamAfterWrite (producer) | 쓴 후에 스트림을 닫을지 열어 둘지 정해요. 기본값은 true예요. | true | boolean | | commitBlockListLater (producer) | true로 설정하면 스테이징된 블록이 바로 커밋되지 않아요. | true | boolean | | createAppendBlob (producer) | true로 설정하면 append 블록을 커밋할 때 append 블록이 생성돼요. | true | boolean | | createPageBlob (producer) | true로 설정하면 page blob을 업로드할 때 page blob이 생성돼요. | true | boolean | | downloadLinkExpiration (producer) | URL 다운로드 링크의 기본 만료 시간(밀리초)을 덮어써요. | | Long | | maxConcurrency (producer) | uploadBlockBlobChunked 연산으로 업로드하는 동안 사용할 최대 병렬 요청 수예요. 기본값은 사용 가능한 프로세서를 기준으로 Azure SDK가 정해요. | | Integer | | maxSingleUploadSize (producer) | uploadBlockBlobChunked 연산에서 단일 업로드 요청의 최대 크기(바이트)예요. 이보다 작은 파일은 한 번의 요청으로 업로드되고, 더 큰 파일은 blockSize 크기의 블록으로 청크 업로드를 써요. 기본값은 256MB예요. | | Long | | operation (producer) |
프로듀서에서 이 컴포넌트와 함께 쓸 수 있는 blob 연산이에요.
Enum values:
-
listBlobContainers
-
findBlobsByTags
-
createBlobContainer
-
deleteBlobContainer
-
listBlobs
-
listBlobVersions
-
getBlob
-
deleteBlob
-
downloadBlobToFile
-
downloadLink
-
uploadBlockBlob
-
uploadBlockBlobChunked
-
stageBlockBlobList
-
commitBlobBlockList
-
getBlobBlockList
-
createAppendBlob
-
commitAppendBlob
-
createPageBlob
-
uploadPageBlob
-
resizePageBlob
-
clearPageBlob
-
getPageBlobRanges
-
getChangeFeed
-
copyBlob
-
createBlobSnapshot
-
setBlobTags
-
getBlobTags
-
setBlobLegalHold
-
setBlobImmutabilityPolicy
-
undeleteBlob
-
setBlobTier
| listBlobContainers | BlobOperationsDefinition | | pageBlobSize (producer) | page blob의 최대 크기를 지정해요. 최대 8TB까지 가능해요. page blob 크기는 512바이트 경계에 맞아야 해요. | 512 | Long | | lazyStartProducer (producer (advanced)) | producer를 lazy(첫 메시지 시점)로 시작할지 여부예요. lazy 시작을 쓰면 producer가 시작 중 실패해서 라우트 시작이 실패하는 상황에서도 CamelContext와 라우트를 시작할 수 있고, 시작 실패 처리를 Camel의 라우팅 에러 핸들러로 넘길 수 있어요. 다만 첫 메시지를 처리하는 시점에 producer를 만들고 시작하는 데 시간이 조금 걸려서 전체 처리 시간이 길어질 수 있다는 점은 유의하세요. | false | boolean | | backoffErrorThreshold (scheduler) | backoffMultipler가 작동하기 전에 연속으로 일어나야 하는 에러 폴링(어떤 오류로 실패한) 횟수예요. | | int | | backoffIdleThreshold (scheduler) | backoffMultipler가 작동하기 전에 연속으로 일어나야 하는 유휴 폴링 횟수예요. | | int | | backoffMultiplier (scheduler) | 유휴/에러 폴링이 연속으로 여러 번 일어나면 예약 폴링 컨슈머가 backoff하도록 해 줘요. multiplier는 다음 실제 시도가 다시 일어나기 전에 건너뛸 폴링 횟수예요. 이 옵션을 쓸 때는 backoffIdleThreshold와/또는 backoffErrorThreshold도 함께 설정해야 해요. | | int | | delay (scheduler) | 다음 폴링 전까지의 밀리초예요. | 500 | long | | greedy (scheduler) | greedy를 켜면 이전 실행에서 1개 이상의 메시지를 폴링했을 때 ScheduledPollConsumer가 즉시 다시 실행돼요. | false | boolean | | initialDelay (scheduler) | 첫 폴링이 시작되기 전까지의 밀리초예요. | 1000 | long | | repeatCount (scheduler) | 실행 횟수의 최대 한도를 지정해요. 1로 설정하면 스케줄러가 한 번만 실행되고, 5로 설정하면 다섯 번만 실행돼요. 0이나 음수는 계속 실행한다는 뜻이에요. | 0 | long | | runLoggingLevel (scheduler) |
컨슈머는 폴링할 때 시작/완료 로그 한 줄을 남겨요. 이 옵션으로 그 로그 레벨을 설정할 수 있어요.
Enum values:
-
TRACE
-
DEBUG
-
INFO
-
WARN
-
ERROR
-
OFF
| TRACE | LoggingLevel | | scheduledExecutorService (scheduler) | 컨슈머가 사용할 커스텀/공유 스레드 풀을 설정할 수 있게 해 줘요. 기본으로 각 컨슈머는 자체 단일 스레드 풀을 가져요. | | ScheduledExecutorService | | scheduler (scheduler) | camel-spring 또는 camel-quartz 컴포넌트의 cron 스케줄러를 쓰게 해 줘요. 내장 스케줄러를 쓰려면 spring 또는 quartz 값을 지정하세요. | none | Object | | schedulerProperties (scheduler) | 커스텀 스케줄러나 Quartz, Spring 기반 스케줄러를 쓸 때 추가 프로퍼티를 설정해요. 접두사가 scheduler인 multi-value 옵션이에요. | | Map | | startScheduler (scheduler) | 스케줄러를 자동으로 시작할지 여부예요. | true | boolean | | timeUnit (scheduler) |
initialDelay와 delay 옵션의 시간 단위예요.
Enum values:
-
NANOSECONDS
-
MICROSECONDS
-
MILLISECONDS
-
SECONDS
-
MINUTES
-
HOURS
-
DAYS
| MILLISECONDS | TimeUnit | | useFixedDelay (scheduler) | 고정 지연(fixed delay)을 쓸지 고정 비율(fixed rate)을 쓸지 정해요. 자세한 내용은 JDK의 ScheduledExecutorService를 보세요. | true | boolean | | accessKey (security) | Azure blob 서비스 인증에 쓸, 연결된 Azure 계정 이름의 액세스 키예요. | | String | | azureClientId (security) | Azure Identity 인증에 쓰는 Azure Client ID예요. | | String | | azureClientSecret (security) | Azure Identity 인증에 쓰는 Azure Client Secret이에요. | | String | | azureTenantId (security) | Azure Identity 인증에 쓰는 Azure Tenant ID예요. | | String | | sasToken (security) | Shared Access Signature를 사용한다면 SAS 토큰을 설정해야 해요. | | String | | sourceBlobAccessKey (security) | 소스 Blob 액세스 키: copyblob 연산을 하려면 안타깝게도 복사하려는 소스 blob의 accessKey가 필요해요. accessKey를 헤더로 넘기는 건 안전하지 않아서 key로 설정할 수 있어요. | | String |
메시지 헤더 (Message Headers)
Azure Storage Blob Service 컴포넌트는 아래 나열된 메시지 헤더(들)를 지원해요:
| Name | Description | Default | Type |
|---|---|---|---|
CamelAzureStorageBlobOperation (producer) Constant: BLOB_OPERATION |
|||
| (모든 연산) 실행할 프로듀서 연산을 지정해요. 프로듀서 연산 관련 내용은 이 페이지의 프로듀서 연산 문서를 참고하세요. |
Enum values:
-
listBlobContainers
-
findBlobsByTags
-
createBlobContainer
-
deleteBlobContainer
-
listBlobs
-
listBlobVersions
-
getBlob
-
deleteBlob
-
downloadBlobToFile
-
downloadLink
-
uploadBlockBlob
-
uploadBlockBlobChunked
-
stageBlockBlobList
-
commitBlobBlockList
-
getBlobBlockList
-
createAppendBlob
-
commitAppendBlob
-
createPageBlob
-
uploadPageBlob
-
resizePageBlob
-
clearPageBlob
-
getPageBlobRanges
-
getChangeFeed
-
copyBlob
-
createBlobSnapshot
-
setBlobTags
-
getBlobTags
-
setBlobLegalHold
-
setBlobImmutabilityPolicy
-
undeleteBlob
-
setBlobTier
| | BlobOperationsDefinition |
| CamelAzureStorageBlobHttpHeaders (producer) Constant: BLOB_HTTP_HEADERS | (uploadBlockBlob, commitBlobBlockList, createAppendBlob, createPageBlob) 연산 집합을 위한 추가 파라미터예요. | | BlobHttpHeaders |
| CamelAzureStorageBlobETag (consumer) Constant: E_TAG | blob의 E Tag예요. | | String |
| CamelAzureStorageBlobCreationTime (consumer) Constant: CREATION_TIME | blob의 생성 시각이에요. | | OffsetDateTime |
| CamelAzureStorageBlobLastModified (consumer) Constant: LAST_MODIFIED | blob이 마지막으로 수정된 시각이에요. | | OffsetDateTime |
| CamelAzureStorageBlobContentType (consumer) Constant: CONTENT_TYPE | blob에 지정된 콘텐츠 타입이에요. | | String |
| CamelAzureStorageBlobContentMD5 (common) Constant: CONTENT_MD5 | (프로듀서) (blob 업로드 관련 대부분의 연산) 블록 콘텐츠의 MD5 해시예요. 이 해시는 전송 중 블록 무결성을 검증하는 데 쓰여요. 이 헤더를 지정하면 스토리지 서비스가 도착한 콘텐츠의 해시를 이 헤더 값과 비교해요. 이 MD5 해시는 blob과 함께 저장되지 않는다는 점에 유의하세요. 두 해시가 일치하지 않으면 연산이 실패해요. (컨슈머) blob에 지정된 콘텐츠 MD5예요. | | byte[] |
| CamelAzureStorageBlobContentEncoding (consumer) Constant: CONTENT_ENCODING | blob에 지정된 콘텐츠 인코딩이에요. | | String |
| CamelAzureStorageBlobContentDisposition (consumer) Constant: CONTENT_DISPOSITION | blob에 지정된 콘텐츠 처리 방식(Content-Disposition)이에요. | | String |
| CamelAzureStorageBlobContentLanguage (consumer) Constant: CONTENT_LANGUAGE | blob에 지정된 콘텐츠 언어예요. | | String |
| CamelAzureStorageBlobCacheControl (consumer) Constant: CACHE_CONTROL | blob에 지정된 캐시 제어 설정이에요. | | String |
| CamelAzureStorageBlobBlobSize (consumer) Constant: BLOB_SIZE | blob의 크기예요. | | long |
| CamelAzureStorageBlobBlobUploadSize (producer) Constant: BLOB_UPLOAD_SIZE | uploadBlockBlob 연산으로 blob을 업로드할 때 InputStream의 길이가 얼마인지 클라이언트에 알려 주는 데 쓸 수 있어요. | | long |
| CamelAzureStorageBlobSequenceNumber (common) Constant: BLOB_SEQUENCE_NUMBER | (프로듀서) (createPageBlob) 요청을 추적할 때 쓸 수 있는 사용자 지정 값이에요. 시퀀스 번호 값은 0에서 263 - 1 사이여야 해요. 기본값은 0이에요. (컨슈머) page blob의 현재 시퀀스 번호예요. | | Long |
| CamelAzureStorageBlobBlobType (consumer) Constant: BLOB_TYPE |
blob의 타입이에요.
Enum values:
-
blockblob
-
appendblob
-
pageblob
| | BlobType |
| CamelAzureStorageBlobLeaseBlob (common) Constant: LEASE_BLOB | 연산에 blob leasing을 쓸지 지정해요. true로 설정하면 컴포넌트가 대상 blob에 배타적 lease를 획득해서 여러 라우트나 애플리케이션이 동시에 처리하는 걸 막아요. | | boolean |
| CamelAzureStorageBlobLeaseDurationInSeconds (common) Constant: LEASE_DURATION_IN_SECONDS | lease 기간을 초 단위로 지정해요. 고정 기간은 15에서 60 사이, 무한 기간은 -1이 유효한 값이에요. | | Integer |
| CamelAzureStorageBlobLeaseStatus (consumer) Constant: LEASE_STATUS |
blob에 걸린 lease의 상태(status)예요.
Enum values:
-
locked
-
unlocked
| | LeaseStatusType |
| CamelAzureStorageBlobLeaseState (consumer) Constant: LEASE_STATE |
blob에 걸린 lease의 상태(state)예요.
Enum values:
-
available
-
leased
-
expired
-
breaking
-
broken
| | LeaseStateType |
| CamelAzureStorageBlobLeaseDuration (consumer) Constant: LEASE_DURATION |
blob에 걸린 lease의 타입이에요.
Enum values:
-
infinite
-
fixed
| | LeaseDurationType |
| CamelAzureStorageBlobCopyId (consumer) Constant: COPY_ID | blob에 수행한 마지막 복사 연산의 식별자예요. | | String |
| CamelAzureStorageBlobCopyStatus (consumer) Constant: COPY_STATUS |
blob에 수행한 마지막 복사 연산의 상태예요.
Enum values:
-
pending
-
success
-
aborted
-
failed
| | CopyStatusType |
| CamelAzureStorageBlobCopySource (consumer) Constant: COPY_SOURCE | blob에 수행한 마지막 복사 연산의 소스예요. | | String |
| CamelAzureStorageBlobCopyProgress (consumer) Constant: COPY_PROGRESS | blob에 수행한 마지막 복사 연산의 진행 상황이에요. | | String |
| CamelAzureStorageBlobCopyCompletionTime (consumer) Constant: COPY_COMPILATION_TIME | blob의 마지막 복사 연산이 완료된 시각이에요. | | OffsetDateTime |
| CamelAzureStorageBlobCopyStatusDescription (consumer) Constant: COPY_STATUS_DESCRIPTION | blob의 마지막 복사 연산에 대한 설명이에요. | | String |
| CamelAzureStorageBlobCopyDestinationSnapshot (consumer) Constant: COPY_DESTINATION_SNAPSHOT | blob의 마지막 증분 복사 스냅샷의 스냅샷 식별자예요. | | String |
| CamelAzureStorageBlobIsServerEncrypted (consumer) Constant: IS_SERVER_ENCRYPTED | blob 콘텐츠가 서버에서 암호화돼 있는지 나타내는 플래그예요. | | boolean |
| CamelAzureStorageBlobIsIncrementalCopy (consumer) Constant: IS_INCREMENTAL_COPY | blob이 증분 복사됐는지 나타내는 플래그예요. | | boolean |
| CamelAzureStorageBlobAccessTier (common) Constant: ACCESS_TIER | (프로듀서) (uploadBlockBlob, commitBlobBlockList) AccessTier 값을 정의해요. (컨슈머) blob의 액세스 티어예요. | | AccessTier |
| CamelAzureStorageBlobIsAccessTierInferred (consumer) Constant: IS_ACCESS_TIER_INFRRRED | blob의 액세스 티어가 blob 프로퍼티에서 추론됐는지 나타내는 플래그예요. | | boolean |
| CamelAzureStorageBlobArchiveStatus (consumer) Constant: ARCHIVE_STATUS | blob의 아카이브 상태예요. | | ArchiveStatus |
| CamelAzureStorageBlobaccessTierChangeTime (consumer) Constant: ACCESS_TIER_CHANGE_TIME | blob의 액세스 티어가 마지막으로 바뀐 시각이에요. | | OffsetDateTime |
| CamelAzureStorageBlobMetadata (common) Constant: METADATA | (프로듀서) (컨테이너·blob 관련 연산) 컨테이너나 blob에 연결할 메타데이터예요. (컨슈머) blob에 연결된 추가 메타데이터예요. | | Map |
| CamelAzureStorageBlobCommittedBlockCount (consumer) Constant: COMMITTED_BLOCK_COUNT | append blob에 커밋된 블록 수예요. | | Integer |
| CamelAzureStorageBlobAppendOffset (consumer) Constant: APPEND_OFFSET | 블록이 block blob에 커밋된 오프셋이에요. | | String |
| CamelAzureStorageBlobRawHttpHeaders (consumer) Constant: RAW_HTTP_HEADERS | 사용자가 쓸 수 있는, 파싱되지 않은 httpHeaders를 돌려 줘요. | | HttpHeaders |
| CamelAzureStorageBlobFileName (consumer) Constant: FILE_NAME | downloadBlobToFile 연산으로 내려받은 파일 이름이에요. | | String |
| CamelAzureStorageBlobDownloadLink (consumer) Constant: DOWNLOAD_LINK | downloadLink 연산이 생성한 다운로드 링크예요. | | String |
| CamelAzureStorageBlobListBlobOptions (producer) Constant: LIST_BLOB_OPTIONS | (listBlobs) BlobContainerClient 객체의 listBlobsFlatSegment 호출 동작을 설정할 수 있는 옵션을 정의해요. | | ListBlobsOptions |
| CamelAzureStorageBlobListDetails (producer) Constant: BLOB_LIST_DETAILS | (listBlobs) 특정 blob을 나열하기 위한 세부 설정이에요. | | BlobListDetails |
| CamelAzureStorageBlobPrefix (producer) Constant: PREFIX | (listBlobs,getBlob) 지정한 접두사로 이름이 시작하는 blob만 돌려 받도록 결과를 걸러 줘요. 모든 blob을 돌려 받으려면 null이면 돼요. | | String |
| CamelAzureStorageBlobRegex (producer) Constant: REGEX | (listBlobs,getBlob) 지정한 정규식과 이름이 일치하는 blob만 돌려 받도록 결과를 걸러 줘요. 모두 돌려 받으려면 null이면 돼요. prefix와 regex를 둘 다 설정하면 regex가 우선하고 prefix는 무시돼요. | | String |
| CamelAzureStorageBlobMaxResultsPerPage (producer) Constant: MAX_RESULTS_PER_PAGE | (listBlobs) BlobPrefix 요소를 모두 포함해 돌려 받을 blob의 최대 개수를 지정해요. 요청에서 maxResultsPerPage를 지정하지 않거나 5,000보다 큰 값을 지정하면 서버는 최대 5,000개까지 돌려 줘요. | | Integer |
| CamelAzureStorageBlobTimeout (producer) Constant: TIMEOUT | (모든 연산) 선택 사항인 타임아웃 값이에요. 이 시간을 넘기면 RuntimeException이 발생해요. | | Duration |
| CamelAzureStorageBlobPublicAccessType (producer) Constant: PUBLIC_ACCESS_TYPE | (createContainer) 이 컨테이너의 데이터를 공개적으로 어떻게 사용할 수 있는지 지정해요. 공개 접근을 막으려면 null을 넘기세요. | | PublicAccessType |
| CamelAzureStorageBlobRequestCondition (producer) Constant: BLOB_REQUEST_CONDITION | (컨테이너·blob 관련 연산) 다양한 요청이 성공하도록 현재 조건으로 제한하는 값을 담고 있어요. 이 조건들은 완전히 선택 사항이에요. | | BlobRequestConditions |
| CamelAzureStorageBlobBlobContainerName (producer) Constant: BLOB_CONTAINER_NAME | (컨테이너·blob 관련 연산) exchange 헤더에서 컨테이너 이름을 덮어쓰거나 설정해요. | | String |
| CamelAzureStorageBlobBlobName (producer) Constant: BLOB_NAME | (blob 관련 연산) exchange 헤더에서 blob 이름을 덮어쓰거나 설정해요. | | String |
| CamelAzureStorageBlobFileDir (producer) Constant: FILE_DIR | (downloadBlobToFile) 다운로드한 blob을 저장할 파일 디렉터리예요. | | String |
| CamelAzureStorageBlobPageBlobRange (producer) Constant: PAGE_BLOB_RANGE | (page blob 관련 연산) PageRange 객체예요. 페이지는 512바이트 경계에 맞아야 하므로 시작 오프셋은 512의 배수, 끝 오프셋은 512 - 1의 배수여야 해요. 유효한 바이트 범위의 예는 0-511, 512-1023 등이에요. | | PageRange |
| CamelAzureStorageBlobPageBlobSize (producer) Constant: PAGE_BLOB_SIZE | (createPageBlob, resizePageBlob) page blob의 최대 크기를 지정해요. 최대 8TB까지 가능해요. page blob 크기는 512바이트 경계에 맞아야 해요. | | Long |
| CamelAzureStorageBlobCommitBlobBlockListLater (producer) Constant: COMMIT_BLOCK_LIST_LATER | (stageBlockBlobList) true로 설정하면 스테이징된 블록이 바로 커밋되지 않아요. | | boolean |
| CamelAzureStorageBlobBlockListType (producer) Constant: BLOCK_LIST_TYPE |
(getBlobBlockList) 돌려 받을 블록 타입을 지정해요.
Enum values:
-
committed
-
uncommitted
-
all
| | BlockListType |
| CamelAzureStorageBlobCreateAppendBlob (producer) Constant: CREATE_APPEND_BLOB | (commitAppendBlob) true로 설정하면 append 블록을 커밋할 때 append 블록이 생성돼요. | | boolean |
| CamelAzureStorageBlobCreatePageBlob (producer) Constant: CREATE_PAGE_BLOB | (uploadPageBlob) true로 설정하면 page blob을 업로드할 때 page blob이 생성돼요. | | boolean |
| CamelAzureStorageBlobDeleteSnapshotsOptionType (producer) Constant: DELETE_SNAPSHOT_OPTION_TYPE |
(deleteBlob) 이 blob의 스냅샷을 삭제할 때의 동작을 지정해요. include는 기본 blob과 모든 스냅샷을 삭제하고, only는 스냅샷만 삭제해요. 스냅샷을 삭제하는 중이라면 null을 넘겨야 해요.
Enum values:
-
include
-
only
| | DeleteSnapshotsOptionType |
| CamelAzureStorageBlobListBlobContainersOptions (producer) Constant: LIST_BLOB_CONTAINERS_OPTIONS | (listBlobContainers) 서비스가 어떤 데이터를 돌려 줘야 하는지 지정하는 ListBlobContainersOptions예요. | | ListBlobContainersOptions |
| CamelAzureStorageBlobParallelTransferOptions (producer) Constant: PARALLEL_TRANSFER_OPTIONS | (downloadBlobToFile, uploadBlockBlobChunked) 파일로 내려받거나 파일에서 업로드할 때 쓸 ParallelTransferOptions예요. 병렬 전송 수 파라미터는 다운로드에서는 무시돼요. | | ParallelTransferOptions |
| CamelAzureStorageBlobFilePath (producer) Constant: FILE_PATH | (uploadBlockBlobChunked) 업로드할 로컬 파일 경로예요. 메시지 본문에서 File, Path, String으로 제공하거나 이 헤더로 제공할 수 있어요. | | String |
| CamelAzureStorageBlobBlockSize (producer) Constant: BLOCK_SIZE | (uploadBlockBlobChunked) 청크 업로드에 쓰는 블록 크기(바이트)예요. 기본값은 4MB(4194304)이고, 최대는 4000MB예요. 0보다 커야 해요. | | Long |
| CamelAzureStorageBlobMaxConcurrency (producer) Constant: MAX_CONCURRENCY | (uploadBlockBlobChunked) 업로드 중에 사용할 최대 병렬 요청 수예요. 기본값은 사용 가능한 프로세서를 기준으로 Azure SDK가 정해요. | | Integer |
| CamelAzureStorageBlobMaxSingleUploadSize (producer) Constant: MAX_SINGLE_UPLOAD_SIZE | (uploadBlockBlobChunked) 단일 업로드 요청의 최대 크기(바이트)예요. 이보다 작은 파일은 한 번의 요청으로 업로드되고, 더 큰 파일은 blockSize 크기의 블록으로 청크 업로드를 써요. 기본값은 256MB예요. | | Long |
| CamelAzureStorageBlobDownloadLinkExpiration (producer) Constant: DOWNLOAD_LINK_EXPIRATION | (downloadLink) URL 다운로드 링크의 기본 만료 시간(밀리초)을 덮어써요. | | Long |
| CamelAzureStorageBlobSourceBlobAccountName (producer) Constant: SOURCE_BLOB_ACCOUNT_NAME | (copyBlob) blob 복사 연산에서 소스 계정 이름으로 쓸 소스 blob 계정 이름이에요. | | String |
| CamelAzureStorageBlobSourceBlobContainerName (producer) Constant: SOURCE_BLOB_CONTAINER_NAME | (copyBlob) blob 복사 연산에서 소스 컨테이너 이름으로 쓸 소스 blob 컨테이너 이름이에요. | | String |
| CamelAzureStorageBlobChangeFeedStartTime (producer) Constant: CHANGE_FEED_START_TIME | (getChangeFeed) 시작 시각 이후의 이벤트를 대략적으로 돌려 받도록 결과를 걸러 줘요. 참고: 이전 시간대(hour)에 속한 몇몇 이벤트도 함께 돌아올 수 있고, 이 시간대의 이벤트 일부가 빠질 수도 있어요. 해당 시간대의 모든 이벤트를 확실히 받으려면 시작 시각을 1시간 내려서 지정하세요. | | OffsetDateTime |
| CamelAzureStorageBlobChangeFeedEndTime (producer) Constant: CHANGE_FEED_END_TIME | (getChangeFeed) 종료 시각 이전의 이벤트를 대략적으로 돌려 받도록 결과를 걸러 줘요. 참고: 다음 시간대(hour)에 속한 몇몇 이벤트도 함께 돌아올 수 있고, 이 시간대의 이벤트 일부가 빠질 수도 있어요. 해당 시간대의 모든 이벤트를 확실히 받으려면 종료 시각을 1시간 올려서 지정하세요. | | OffsetDateTime |
| CamelAzureStorageBlobContext (producer) Constant: CHANGE_FEED_CONTEXT | (getChangeFeed) 서비스 호출 중 Http 파이프라인을 통해 전달되는 추가 컨텍스트예요. | | Context |
| CamelAzureStorageBlobSnapshotId (common) Constant: BLOB_SNAPSHOT_ID | 스냅샷 식별자예요. createBlobSnapshot에서는 새로 만든 스냅샷의 id로 exchange에 설정돼요. 읽기 연산(getBlob, downloadBlobToFile, downloadLink)에서는 특정 blob 스냅샷을 대상으로 삼는 입력으로 제공할 수 있어요. | | String |
| CamelAzureStorageBlobVersionId (common) Constant: BLOB_VERSION_ID | blob 버전 식별자예요. 읽기 연산(getBlob, downloadBlobToFile, downloadLink)에서는 스토리지 계정에서 버저닝이 켜져 있을 때 특정 blob 버전을 대상으로 삼는 입력으로 제공할 수 있어요. 컨슈머 쪽에서는 사용 가능할 때 blob 프로퍼티에서 채워져요. | | String |
| CamelAzureStorageBlobIsCurrentVersion (consumer) Constant: BLOB_IS_CURRENT_VERSION | 이것이 blob의 현재 버전인지 나타내는 플래그예요. | | Boolean |
| CamelAzureStorageBlobTags (common) Constant: BLOB_TAGS | (프로듀서) (setBlobTags) blob에 키-값 쌍으로 설정할 태그예요. (컨슈머) blob에서 가져온 태그예요. | | Map |
| CamelAzureStorageBlobTagFilter (producer) Constant: BLOB_TAG_FILTER | (findBlobsByTags) 인덱스 태그를 기준으로 스토리지 계정 전체의 blob을 걸러 내는 SQL 유사 표현식이에요. 예를 들면 Environment = 'Production' AND Status = 'Active' 같은 식이에요. | | String |
| CamelAzureStorageBlobLegalHold (common) Constant: BLOB_LEGAL_HOLD | (프로듀서) (setBlobLegalHold) blob에 설정할 legal hold 상태예요. true로 설정하면 값을 false로 바꿔 hold를 해제하기 전까지 blob이 수정과 삭제에서 보호돼요. (컨슈머) setBlobLegalHold 연산이 돌려 준 legal hold 상태예요. | | Boolean |
| CamelAzureStorageBlobImmutabilityPolicy (producer) Constant: BLOB_IMMUTABILITY_POLICY | (setBlobImmutabilityPolicy) 있을 때 정책 만료 시간과 모드 헤더를 덮어쓰는, 미리 만들어 둔 BlobImmutabilityPolicy 객체예요. | | BlobImmutabilityPolicy |
| CamelAzureStorageBlobImmutabilityPolicyExpiryTime (producer) Constant: BLOB_IMMUTABILITY_POLICY_EXPIRY_TIME | (setBlobImmutabilityPolicy) 시간 기반 보존 정책의 만료 시간이에요. 본문이나 CamelAzureStorageBlobImmutabilityPolicy 헤더로 미리 만든 BlobImmutabilityPolicy를 제공하지 않는 한 필수예요. | | OffsetDateTime |
| CamelAzureStorageBlobImmutabilityPolicyMode (producer) Constant: BLOB_IMMUTABILITY_POLICY_MODE |
(setBlobImmutabilityPolicy) 불변성(immutability) 정책의 모드예요. UNLOCKED(기본값, 수정·삭제 가능), LOCKED(수정·단축 불가, 연장만 가능), MUTABLE 중 하나예요.
Enum values:
-
Mutable
-
Unlocked
-
Locked
| | BlobImmutabilityPolicyMode |
| CamelAzureStorageBlobRehydratePriority (producer) Constant: REHYDRATE_PRIORITY | (setBlobTier) archive 티어에서 blob을 rehydrate할 때 쓰는 rehydrate 우선순위예요. Standard 또는 High예요. archive가 아닌 티어 간에 티어를 바꿀 때는 무시돼요. | | RehydratePriority |
필수 정보 옵션 (Required information options):
이 컴포넌트를 쓰려면 필요한 Azure 인증 정보를 여러 가지 방법으로 제공할 수 있어요:
-
직접 만든 BlobServiceClient 인스턴스를
blobServiceClient로 주입하는 방법도 있어요. 참고: BlockBlobClient 같은 특정 클라이언트를 만들 필요는 없어요. BlobServiceClient가 상위 레벨을 나타내고, 이걸로 더 낮은 레벨의 클라이언트를 꺼내 쓸 수 있어요. -
Azure Identity를 쓰는 방법:
credentialType=AZURE_IDENTITY로 지정하고 필요한 환경 변수를 제공해요. 시크릿/인증서 기반 서비스 프린시펄(예: 앱 등록) 인증과 사용자 이름·비밀번호 인증을 모두 쓸 수 있어요. 참고로 이게 기본 인증 전략이에요. -
공유 스토리지 계정 키를 쓰는 방법:
credentialType=SHARED_ACCOUNT_KEY로 지정하고 Azure 계정의accountName과accessKey를 제공해요. 시작하기에 가장 간단한 방법이에요. accessKey는 Azure 포털에서 생성할 수 있어요. -
공유 스토리지 계정 키를 쓰는 방법:
credentialType=SHARED_KEY_CREDENTIAL로 지정하고 StorageSharedKeyCredential 인스턴스를credentials옵션으로 주입하는 방법도 있어요. -
Azure SAS를 쓰는 방법:
credentialType=AZURE_SAS로 지정하고sasToken파라미터로 SAS 토큰을 제공해요.
사용법 (Usage)
예를 들어 camelazure 스토리지 계정의 container1에 있는 block blob hello.txt의 내용을 내려받으려면 다음 스니펫을 쓰면 돼요:
from("azure-storage-blob://camelazure/container1?blobName=hello.txt&credentialType=SHARED_ACCOUNT_KEY&accessKey=RAW(yourAccessKey)")
.to("file://blobdirectory");
<route>
<from uri="azure-storage-blob://camelazure/container1?blobName=hello.txt&credentialType=SHARED_ACCOUNT_KEY&accessKey=RAW(yourAccessKey)"/>
<to uri="file://blobdirectory"/>
</route>
- route:
from:
uri: azure-storage-blob://camelazure/container1
parameters:
blobName: hello.txt
credentialType: SHARED_ACCOUNT_KEY
accessKey: RAW(yourAccessKey)
steps:
- to:
uri: file://blobdirectory
고급 Azure Storage Blob 설정 (Advanced Azure Storage Blob configuration)
Camel 애플리케이션이 방화벽 뒤에서 돌아가거나 BlobServiceClient 인스턴스 설정을 더 세밀하게 제어하고 싶다면, 직접 인스턴스를 만들 수 있어요:
Java 전용: 프로그래밍 방식으로 BlobServiceClient 설정
StorageSharedKeyCredential credential = new StorageSharedKeyCredential("yourAccountName", "yourAccessKey");
String uri = String.format("https://%s.blob.core.windows.net", "yourAccountName");
BlobServiceClient client = new BlobServiceClientBuilder()
.endpoint(uri)
.credential(credential)
.buildClient();
// This is camel context
context.getRegistry().bind("client", client);
그리고 Camel azure-storage-blob 컴포넌트 설정에서 이 인스턴스를 참조하면 돼요:
from("azure-storage-blob://cameldev/container1?blobName=myblob&serviceClient=#client")
.to("mock:result");
<route>
<from uri="azure-storage-blob://cameldev/container1?blobName=myblob&serviceClient=#client"/>
<to uri="mock:result"/>
</route>
- route:
from:
uri: azure-storage-blob://cameldev/container1
parameters:
blobName: myblob
serviceClient: "#client"
steps:
- to:
uri: mock:result
레지스트리에서 BlobServiceClient 자동 감지 (Automatic detection of BlobServiceClient client in registry)
컴포넌트는 레지스트리에 BlobServiceClient 빈이 있는지 감지할 수 있어요. 그 타입의 인스턴스가 유일하면 그걸 클라이언트로 쓰기 때문에, 위 예제처럼 URI 파라미터로 정의하지 않아도 돼요. 엔드포인트를 더 똑똑하게 설정하는 데 정말 유용할 수 있어요.
Azure Storage Blob 프로듀서 연산 (Azure Storage Blob Producer operations)
Camel Azure Storage Blob 컴포넌트는 프로듀서 쪽에서 폭넓은 연산을 제공해요:
서비스 수준 연산 (Operations on the service level)
이 연산들에는 accountName이 필수예요.
| Operation | Description |
|---|---|
listBlobContainers |
blob의 내용을 가져와요. 이 연산의 출력을 blob 범위로 제한할 수 있어요. |
getChangeFeed |
스토리지 계정에서 blob과 blob 메타데이터에 일어나는 모든 변경의 트랜잭션 로그를 돌려 줘요. change feed는 이런 변경의 순서가 보장되고, 내구성 있고, 불변이며, 읽기 전용인 로그를 제공해요. |
findBlobsByTags |
인덱스 태그가 CamelAzureStorageBlobTagFilter 헤더나 메시지 본문으로 제공한 SQL 유사 필터 표현식과 일치하는 blob 목록을 스토리지 계정 전체에서 돌려 줘요. 필요하면 CamelAzureStorageBlobMaxResultsPerPage와 CamelAzureStorageBlobTimeout도 존중해요. 결과 본문은 List<TaggedBlobItem>이에요. |
컨테이너 수준 연산 (Operations on the container level)
이 연산들에는 accountName과 containerName이 필수예요.
| Operation | Description |
|---|---|
createBlobContainer |
스토리지 계정 안에 새 컨테이너를 만들어요. 같은 이름의 컨테이너가 이미 있으면 프로듀서가 무시해요. |
deleteBlobContainer |
스토리지 계정에서 지정한 컨테이너를 삭제해요. 컨테이너가 없으면 연산이 실패해요. |
listBlobs |
이 컨테이너의 blob 목록을 폴더 구조를 평탄화해서 돌려 줘요. |
listBlobVersions |
이 컨테이너의 blob과 버전 목록을 돌려 줘요. 결과의 각 BlobItem은 자체 versionId와 isCurrentVersion 플래그를 갖고 있어서 모든 blob의 전체 버전 이력을 살펴볼 수 있어요. 스토리지 계정에서 버저닝이 켜져 있어야 해요. listBlobs와 같은 prefix, regex, maxResultsPerPage 필터를 존중해요. |
blob 수준 연산 (Operations on the blob level)
이 연산들에는 accountName, containerName, blobName이 필수예요.
| Operation | Blob Type | Description |
|---|---|---|
getBlob |
Common | blob의 내용을 가져와요. 이 연산의 출력을 blob 범위로 제한할 수 있어요. |
deleteBlob |
Common | blob을 삭제해요. |
downloadBlobToFile |
Common | blob 전체를 path가 가리키는 파일로 내려받아요. 파일은 새로 만들어야 하고 이미 존재하면 안 돼요. 파일이 이미 있으면 FileAlreadyExistsException이 던져져요. |
downloadLink |
Common | SAS(공유 액세스 서명)를 사용해 지정한 blob의 다운로드 링크를 생성해요. 기본으로 허용 접근 시간은 1시간으로 제한되지만, 헤더로 기본 만료 시간을 바꿀 수 있어요. |
uploadBlockBlob |
BlockBlob | 새 block blob을 만들거나 기존 block blob의 내용을 갱신해요. 기존 block blob을 갱신하면 blob의 기존 메타데이터를 덮어써요. PutBlob은 부분 갱신을 지원하지 않아서 기존 blob 내용이 새 내용으로 덮여 써져요. 참고: 더 큰 파일에는 uploadBlockBlobChunked를 쓰세요. |
uploadBlockBlobChunked |
BlockBlob | 큰 파일(수 GB까지)을 지원하면서 block blob을 만들거나 갱신해요. 메모리 효율을 위해 청크 병렬 업로드를 써요. 본문으로 File, Path, WrappedFile, InputStream을 받아들여요. 성능 튜닝은 blockSize(기본값: 4MB)와 maxConcurrency(기본값: auto)로 설정해요. 256MB보다 큰 파일에 권장해요. |
stageBlockBlobList |
BlockBlob |
지정한 블록을 block blob의 "staging area"에 올려서 나중에 commitBlobBlockList 호출로 커밋되게 해요. 다만 헤더 CamelAzureStorageBlobCommitBlobBlockListLater나 설정 commitBlockListLater가 false로 설정돼 있으면 블록을 스테이징한 직후 바로 커밋해요. |
commitBlobBlockList |
BlockBlob |
blob을 구성할 블록 ID 목록을 지정해서 blob을 써요. blob의 일부로 쓰이려면 블록이 이전 stageBlockBlobList 연산에서 서버에 성공적으로 기록돼 있어야 해요. commitBlobBlockList를 호출하면 바뀐 블록만 업로드한 다음 새 블록과 기존 블록을 함께 커밋하는 방식으로 blob을 갱신할 수 있어요. 블록 목록에 지정되지 않은 블록은 영구 삭제돼요. |
getBlobBlockList |
BlockBlob |
지정한 blocklist 필터로 block blob의 일부로 업로드된 블록 목록을 돌려 줘요. |
createAppendBlob |
AppendBlob |
길이가 0인 append blob을 만들어요. append blob에 데이터를 추가하려면 commitAppendBlo`b 연산을 호출하세요. |
commitAppendBlob |
AppendBlob |
기존 append blob의 끝에 새 데이터 블록을 커밋해요. 헤더 CamelAzureStorageBlobCreateAppendBlob나 설정 createAppendBlob이 true로 설정돼 있으면 커밋하기 전에 내부적으로 createAppendBlob 연산을 호출해 appendBlob을 만들려고 시도해요. |
createPageBlob |
PageBlob |
지정한 길이의 page blob을 만들어요. page blob에 데이터를 올리려면 uploadPageBlob 연산을 호출하세요. |
uploadPageBlob |
PageBlob |
page blob에 한 개 이상의 페이지를 써요. 크기는 512의 배수여야 해요. 헤더 CamelAzureStorageBlobCreatePageBlob이나 설정 createPageBlob이 true로 설정돼 있으면 업로드하기 전에 내부적으로 createPageBlob 연산을 호출해 blob을 만들려고 시도해요. |
resizePageBlob |
PageBlob |
page blob을 지정한 크기로 조정해요. 크기는 512의 배수여야 해요. |
clearPageBlob |
PageBlob |
page blob에서 지정한 페이지를 해제해요. 범위 크기는 512의 배수여야 해요. |
getPageBlobRanges |
PageBlob |
page blob 또는 page blob 스냅샷의 유효한 페이지 범위 목록을 돌려 줘요. |
copyBlob |
Common |
한 컨테이너에서 다른 컨테이너로 blob을 복사해요. 계정이 달라도 돼요. |
createBlobSnapshot |
Common |
blob의 읽기 전용 스냅샷을 만들어요. 스냅샷 ID는 CamelAzureStorageBlobSnapshotId 헤더로 돌려 받아요. |
setBlobTags |
Common |
blob에 사용자 정의 인덱스 태그를 설정해요. 태그는 키-값 쌍으로, 컨테이너들 사이에서 blob을 걸러 내고 조회하는 데 쓸 수 있어요. 태그는 CamelAzureStorageBlobTags 헤더나 메시지 본문(Map<String, String>)으로 제공할 수 있어요. |
getBlobTags |
Common |
blob에서 사용자 정의 인덱스 태그를 가져와요. 태그는 메시지 본문(Map<String, String>)으로 돌려 받고, CamelAzureStorageBlobTags 헤더에도 설정돼요. |
setBlobLegalHold |
Common |
blob에 legal hold를 설정해요. legal hold 플래그(Boolean)는 CamelAzureStorageBlobLegalHold 헤더나 메시지 본문으로 제공해요. legal hold가 걸려 있는 동안은 false로 다시 연산을 호출해 명시적으로 해제하기 전까지 blob을 수정하거나 삭제할 수 없어요. |
setBlobImmutabilityPolicy |
Common |
blob에 시간 기반 불변성(immutability) 정책을 설정해요. 정책 만료 시간(OffsetDateTime)은 CamelAzureStorageBlobImmutabilityPolicyExpiryTime 헤더에서, 정책 모드(BlobImmutabilityPolicyMode, 기본값 UNLOCKED)는 CamelAzureStorageBlobImmutabilityPolicyMode에서 읽어요. 미리 만든 BlobImmutabilityPolicy를 메시지 본문이나 CamelAzureStorageBlobImmutabilityPolicy 헤더로 제공할 수도 있어요. |
undeleteBlob |
Common |
soft delete된 blob의 내용과 메타데이터, 그리고 관련된 soft delete된 스냅샷을 복원해요. 이 연산이 성공하려면 스토리지 계정에서 soft delete가 켜져 있어야 해요. |
setBlobTier |
Common |
기존 blob의 액세스 티어를 설정해요. 대상 티어(HOT, COOL, COLD, ARCHIVE 같은 AccessTier)는 CamelAzureStorageBlobAccessTier 헤더나 메시지 본문에서 읽어요. ARCHIVE에서 blob을 rehydrate할 때는 선택 사항인 CamelAzureStorageBlobRehydratePriority 헤더(RehydratePriority, STANDARD 또는 HIGH)가 rehydrate 우선순위를 정해요. |
이 연산들을 Camel 애플리케이션에서 어떻게 쓰는지는 이 페이지의 예제 섹션을 참고하세요.
하위 문서 (Sub-Pages)
특정 기능을 더 자세히 알고 싶으면 다음을 보세요:
-
Producer Operations - 모든 프로듀서 연산 예제, blob 스냅샷/버전, SAS 토큰 생성
-
Consumer Examples - 읽은 후 삭제(delete after read)와 읽은 후 이동(move after read)을 포함한 컨슈머 패턴
중요한 개발 참고 사항 (Important Development Notes)
모든 통합 테스트는 Testcontainers를 사용하고 기본으로 실행돼요. Azure 서비스를 쓰는 모든 통합 테스트를 실행하려면 Azure accessKey와 accountName을 구해야 해요. 목업 단위 테스트 외에 변경을 만들 때마다, 심지어 클라이언트를 업그레이드할 때마다 통합 테스트를 실행해야 해요. Azure 클라이언트는 마이너 버전 업그레이드에서도 문제를 일으킬 수 있거든요. 통합 테스트를 실행하려면 이 컴포넌트 디렉터리에서 다음 maven 명령을 실행하세요:
mvn verify -DaccountName=myacc -DaccessKey=mykey -DcredentialType=SHARED_ACCOUNT_KEY
여기서 accountName은 Azure 계정 이름이고, accessKey는 Azure 포털에서 생성한 액세스 키예요.
더 알아보기 (Learn more)
프로듀서 연산별 사용 예제와 blob 스냅샷·버전, SAS 토큰 생성이 궁금하면 Producer Operations 하위 문서를, 읽은 후 삭제(delete after read)·이동(move after read) 같은 컨슈머 패턴은 Consumer Examples 하위 문서를 참고하세요. Azure 인증 정보를 제공하는 방법은 위의 필수 정보 옵션 섹션에 정리돼 있고, 이 컴포넌트를 수정하거나 Azure SDK 버전을 올릴 때는 중요한 개발 참고 사항 섹션의 maven 통합 테스트 명령을 꼭 실행해 보세요.