본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Minio

원문 보기 위키 갱신

Minio 컴포넌트는 Minio 객체 스토리지 서비스에 객체를 저장하고 가져올 수 있게 해 줘요. Camel 3.5부터 제공됐고, producer와 consumer를 모두 지원합니다. 다만 이 minio 컴포넌트는 폐기 예정(deprecated)이라 향후 릴리스에서 제거될 수 있어요.

출처: 문서

본문

경고 폐기 예정: 이 minio는 폐기 예정이며, 향후 릴리스에서 제거될 수 있어요.

Camel 3.5부터 지원

producer와 consumer를 모두 지원해요

Minio 컴포넌트는 Minio 서비스에 객체를 저장하고 가져오는 기능을 지원해요.

준비물 (Prerequisites)

버킷/폴더에 인가된 접근을 하려면 유효한 자격 증명이 있어야 해요. 자세한 정보는 Minio에서 확인할 수 있어요.

URI 형식 (URI Format)

minio://bucketName[?options]

버킷이 아직 없으면 버킷이 생성돼요.
다음 형식으로 URI에 쿼리 옵션을 붙일 수 있어요: ?options=value&option2=value&…​

예를 들어 helloBucket 버킷에서 hello.txt 파일을 읽으려면 다음 스니펫을 사용하세요:

  • Java

  • XML

  • YAML

from("minio://helloBucket?accessKey=yourAccessKey&secretKey=yourSecretKey&objectName=hello.txt")
  .to("file:/var/downloaded");
<route>
  <from uri="minio://helloBucket?accessKey=yourAccessKey&amp;secretKey=yourSecretKey&amp;objectName=hello.txt"/>
  <to uri="file:/var/downloaded"/>
</route>
- route:
    from:
      uri: minio://helloBucket
      parameters:
        accessKey: yourAccessKey
        secretKey: yourSecretKey
        objectName: hello.txt
      steps:
        - to:
            uri: file:/var/downloaded

옵션 설정 방법 (Configuring Options)

Camel 컴포넌트는 두 단계로 나눠 설정합니다:

  • 컴포넌트(component) 레벨

  • 엔드포인트(endpoint) 레벨

컴포넌트 옵션 설정 (Configuring Component Options)

컴포넌트 레벨에서는 엔드포인트들이 이어서 물려받는 일반적이고 공유되는 설정을 해요. 가장 상위의 설정 레벨이죠.

예를 들어 컴포넌트에는 보안 설정, 인증용 자격 증명, 네트워크 연결 URL 같은 것들이 있을 수 있어요.

컴포넌트에 따라 옵션이 몇 개뿐인 것도 있고 아주 많은 것도 있어요. 컴포넌트는 보통 널리 쓰이는 기본값이 미리 설정되어 있어서, 몇 가지 옵션만 설정하거나 아예 하나도 건드리지 않아도 되는 경우가 많아요.

컴포넌트는 다음 방법으로 설정할 수 있어요:

  • the Component DSL.

  • 설정 파일(application.properties, *.yaml 파일 등).

  • Java 코드에서 직접.

엔드포인트 옵션 설정 (Configuring Endpoint Options)

엔드포인트는 옵션이 많아서 설정에 시간을 더 쓰게 될 거예요. 이 옵션들이 엔드포인트가 원하는 일을 하도록 커스터마이즈해 줘요. 옵션은 엔드포인트가 consumer(from)로 쓰이는지, producer(to)로 쓰이는지, 둘 다인지에 따라 분류되기도 해요.

엔드포인트 설정은 대부분 엔드포인트 URI에 _path_와 query 파라미터로 바로 하는 경우가 많아요. Java에서 엔드포인트와 데이터 포맷을 _타입 세이프_하게 설정하려면 Endpoint DSL과 DataFormat DSL을 쓸 수도 있어요.

옵션을 설정할 때 좋은 습관은 Property Placeholders를 사용하는 거예요.

프로퍼티 플레이스홀더는 이런 장점이 있어요:

  • URL, 포트 번호, 민감한 정보 같은 설정을 하드코딩하는 걸 막아 줘요.

  • 설정을 코드 밖으로 분리할 수 있어요.

  • 코드가 더 유연해지고 재사용하기 좋아져요.

다음 두 섹션에서 모든 옵션을 나열해요. 먼저 컴포넌트 옵션, 그다음 엔드포인트 옵션 순서예요.

컴포넌트 옵션 (Component Options)

Minio 컴포넌트가 지원하는 옵션은 아래와 같아요.

Name Description Default Type
autoCreateBucket (common) 버킷 이름이 존재하지 않을 때 버킷을 자동 생성할지 설정해요. true boolean
configuration (common) 컴포넌트 설정이에요. MinioConfiguration
endpoint (common) 엔드포인트는 URL, 도메인 이름, IPv4 주소 또는 IPv6 주소일 수 있어요. String
minioClient (common) Autowired 레지스트리에 있는 Minio Client 객체의 참조예요. MinioClient
objectLock (common) 새 버킷을 만들 때 설정해요. false boolean
policy (common) 메서드에서 설정할 이 큐의 정책이에요. String
proxyPort (common) TCP/IP 포트 번호예요. HTTP와 HTTPS의 기본값으로 80과 443을 사용해요. Integer
region (common) Minio 클라이언트가 동작할 리전이에요. 이 파라미터를 쓰면 설정은 리전의 소문자 이름(예: ap-east-1)을 기대하고, Region.EU_WEST_1.id() 형태의 이름을 써야 해요. String
secure (common) minio 서비스에 보안 연결을 사용할지 여부를 나타내는 플래그예요. false boolean
autoCloseBody (consumer) 이 옵션이 true이고 includeBody가 true이면 exchange 완료 시 MinioObject.close() 메서드가 호출돼요. 이 옵션은 includeBody 옵션과 아주 밀접하게 연관돼 있어요. includeBody를 true로, autocloseBody를 false로 설정하면 MinioObject 스트림을 닫는 건 호출자의 몫이 돼요. autocloseBody를 true로 설정하면 MinioObject 스트림이 자동으로 닫혀요. true boolean
bridgeErrorHandler (consumer) consumer를 Camel 라우팅 Error Handler에 연결(bridge)할 수 있게 해 줘요. 그러면 Camel consumer가 들어오는 메시지를 가져오려는 중에 (가능하다면) 발생한 예외들이 예외로 처리되지 않고 메시지로 처리되어 라우팅 Error Handler에서 다뤄져요. 중요: 이 기능은 서드파티 컴포넌트가 예외가 던져졌을 때 Camel에 알릴 수 있을 때만 가능해요. 일부 컴포넌트는 이를 내부에서만 처리해서 bridgeErrorHandler를 쓸 수 없어요. 다른 상황에서는 Camel 컴포넌트를 개선해서 서드파티 컴포넌트에 연결(hook)해 이를 가능하게 만들 수도 있어요. 기본적으로 consumer는 org.apache.camel.spi.ExceptionHandler로 예외를 처리하고, 예외는 WARN 또는 ERROR 레벨로 로그에 남고 무시돼요. false boolean
bypassGovernanceMode (consumer) 특정 객체를 삭제할 때 bypassGovernanceMode를 적용하고 싶다면 이 플래그를 설정해요. false boolean
deleteAfterRead (consumer) 객체를 가져온 뒤 Minio에서 객체를 삭제해요. 삭제는 Exchange가 커밋된 경우에만 수행돼요. 롤백이 일어나면 객체는 삭제되지 않아요. 이 옵션이 false이면 폴링할 때마다 같은 객체들이 계속 다시 가져와져요. 그래서 중복을 걸러내려면 라우트에서 Idempotent Consumer EIP를 사용해야 해요. MinioConstants#BUCKET_NAME과 MinioConstants#OBJECT_NAME 헤더를 쓰거나, MinioConstants#OBJECT_NAME 헤더만 써서 필터링할 수 있어요. true boolean
delimiter (consumer) 관심 있는 객체만 소비하도록 ListObjectsRequest에서 사용하는 구분자예요. String
destinationBucketName (consumer) 대상 버킷 이름이에요. String
destinationObjectName (consumer) 대상 객체 이름이에요. String
includeBody (consumer) true이면 exchange 본문이 파일 내용에 대한 스트림으로 설정돼요. false이면 헤더에 Minio 객체 메타데이터가 설정되지만 본문은 null이 돼요. 이 옵션은 autocloseBody 옵션과 아주 밀접하게 연관돼 있어요. includeBody를 true로, autocloseBody를 false로 설정하면 MinioObject 스트림을 닫는 건 호출자의 몫이 돼요. autocloseBody를 true로 설정하면 MinioObject 스트림이 자동으로 닫혀요. true boolean
includeFolders (consumer) ListObjectsRequest에서 폴더 포함(include folders)을 설정할 때 쓰는 플래그예요. false boolean
includeUserMetadata (consumer) ListObjectsRequest에서 사용자 메타데이터가 있는 객체를 가져올 때 쓰는 플래그예요. false boolean
includeVersions (consumer) ListObjectsRequest에서 버저닝이 적용된 객체를 가져올 때 쓰는 플래그예요. false boolean
length (consumer) offset부터의 객체 데이터 바이트 수예요. long
matchETag (consumer) 객체를 가져올 때 match ETag 파라미터를 설정해요. String
maxConnections (consumer) minio 클라이언트 설정에 maxConnections 파라미터를 설정해요. 60 int
maxMessagesPerPoll (consumer) 각 폴링에서 폴링 한도로 쓸 최대 메시지 수를 가져와요. 기본값은 10이고, 0이나 음수로 설정하면 무제한이 돼요. 10 int
modifiedSince (consumer) 객체를 가져올 때 modified since 파라미터를 설정해요. ZonedDateTime
moveAfterRead (consumer) 객체를 가져온 뒤 다른 버킷으로 옮겨요. 이 연산을 하려면 destinationBucket 옵션을 설정해야 해요. 버킷 복사 연산은 Exchange가 커밋된 경우에만 수행돼요. 롤백이 일어나면 객체는 옮겨지지 않아요. false boolean
notMatchETag (consumer) 객체를 가져올 때 not match ETag 파라미터를 설정해요. String
objectName (consumer) 지정한 객체 이름으로 버킷에서 객체를 가져와요. String
offset (consumer) 객체 데이터의 시작 바이트 위치예요. long
prefix (consumer) 객체 이름이 이 접두사로 시작해요. String
recursive (consumer) 디렉터리 구조 흉내 대신 재귀적으로 나열해요. false boolean
startAfter (consumer) 이 객체 이름 이후의 객체들을 버킷에서 나열해요. String
unModifiedSince (consumer) 객체를 가져올 때 un modified since 파라미터를 설정해요. ZonedDateTime
useVersion1 (consumer) true이면 REST API 버전 1을 사용해요. false boolean
versionId (consumer) 객체를 삭제할 때 그 객체의 특정 version_ID를 설정해요. String
deleteAfterWrite (producer) Minio 파일이 업로드된 뒤 파일 객체를 삭제해요. false boolean
keyName (producer) 엔드포인트 파라미터로 버킷 안 요소의 키 이름을 설정해요. String
lazyStartProducer (producer) producer를 lazy(첫 메시지 시점)로 시작할지 여부예요. lazy 시작을 쓰면 producer가 시작 중 실패해서 라우트 시작이 실패하는 상황에서도 CamelContext와 라우트를 시작할 수 있고, 시작 실패 처리를 Camel의 라우팅 에러 핸들러로 넘길 수 있어요. 다만 첫 메시지를 처리하는 시점에 producer를 만들고 시작하는 데 시간이 조금 걸려서 전체 처리 시간이 길어질 수 있다는 점은 유의하세요. false boolean
operation (producer)
사용자가 업로드만 하지 않으려는 경우에 수행할 연산이에요.

Enum values:

  • copyObject

  • listObjects

  • deleteObject

  • deleteObjects

  • deleteBucket

  • listBuckets

  • getObject

  • getObjectRange

  • createDownloadLink

  • createUploadLink

| | MinioOperations | | pojoRequest (producer) | POJO 요청을 본문으로 쓸지 여부예요. | false | boolean | | storageClass (producer) | 요청에 설정할 스토리지 클래스예요. | | String | | autowiredEnabled (advanced) | autowiring이 켜져 있는지 여부예요. 레지스트리에서 일치하는 타입의 인스턴스가 단 하나 있는지 찾아 컴포넌트에 자동 설정하는 자동 autowiring 옵션(옵션이 autowired로 표시되어 있어야 해요)에 사용돼요. JDBC 데이터 소스, JMS 커넥션 팩토리, AWS 클라이언트 등을 자동 설정하는 데 쓸 수 있어요. | true | boolean | | customHttpClient (advanced) | 인가된 접근을 위한 커스텀 HTTP 클라이언트를 설정해요. | | OkHttpClient | | healthCheckConsumerEnabled (health) | 이 컴포넌트의 consumer 기반 health check를 모두 켜거나 끌 때 사용해요. | true | boolean | | healthCheckProducerEnabled (health) | 이 컴포넌트의 producer 기반 health check를 모두 켜거나 끌 때 사용해요. 참고: Camel은 기본적으로 producer 기반 health check를 모두 꺼 두었어요. camel.health.producersEnabled=true로 설정하면 producer 검사를 전역으로 켤 수 있어요. | true | boolean | | accessKey (security) | Amazon AWS의 Secret Access Key 또는 Minio Access Key예요. 설정하지 않으면 Camel이 익명 접근으로 서비스에 연결해요. | | String | | secretKey (security) | Amazon AWS의 Access Key Id 또는 Minio Secret Key예요. 설정하지 않으면 Camel이 익명 접근으로 서비스에 연결해요. | | String | | serverSideEncryption (security) | 서버 사이드 암호화예요. | | ServerSideEncryption | | serverSideEncryptionCustomerKey (security) | 객체를 복사/이동할 때 원본 객체에 적용하는 서버 사이드 암호화예요. | | CustomerKey |

엔드포인트 옵션 (Endpoint Options)

Minio 엔드포인트는 다음 URI 문법으로 설정해요:

minio:bucketName

다음 _path_와 query 파라미터를 사용해요:

경로 파라미터 (Path Parameters)

Name Description Default Type
bucketName (common) 필수 버킷 이름이에요. String

쿼리 파라미터 (Query Parameters)

Name Description Default Type
autoCreateBucket (common) 버킷 이름이 존재하지 않을 때 버킷을 자동 생성할지 설정해요. true boolean
endpoint (common) 엔드포인트는 URL, 도메인 이름, IPv4 주소 또는 IPv6 주소일 수 있어요. String
minioClient (common) Autowired 레지스트리에 있는 Minio Client 객체의 참조예요. MinioClient
objectLock (common) 새 버킷을 만들 때 설정해요. false boolean
policy (common) 메서드에서 설정할 이 큐의 정책이에요. String
proxyPort (common) TCP/IP 포트 번호예요. HTTP와 HTTPS의 기본값으로 80과 443을 사용해요. Integer
region (common) Minio 클라이언트가 동작할 리전이에요. 이 파라미터를 쓰면 설정은 리전의 소문자 이름(예: ap-east-1)을 기대하고, Region.EU_WEST_1.id() 형태의 이름을 써야 해요. String
secure (common) minio 서비스에 보안 연결을 사용할지 여부를 나타내는 플래그예요. false boolean
autoCloseBody (consumer) 이 옵션이 true이고 includeBody가 true이면 exchange 완료 시 MinioObject.close() 메서드가 호출돼요. 이 옵션은 includeBody 옵션과 아주 밀접하게 연관돼 있어요. includeBody를 true로, autocloseBody를 false로 설정하면 MinioObject 스트림을 닫는 건 호출자의 몫이 돼요. autocloseBody를 true로 설정하면 MinioObject 스트림이 자동으로 닫혀요. true boolean
bypassGovernanceMode (consumer) 특정 객체를 삭제할 때 bypassGovernanceMode를 적용하고 싶다면 이 플래그를 설정해요. false boolean
deleteAfterRead (consumer) 객체를 가져온 뒤 Minio에서 객체를 삭제해요. 삭제는 Exchange가 커밋된 경우에만 수행돼요. 롤백이 일어나면 객체는 삭제되지 않아요. 이 옵션이 false이면 폴링할 때마다 같은 객체들이 계속 다시 가져와져요. 그래서 중복을 걸러내려면 라우트에서 Idempotent Consumer EIP를 사용해야 해요. MinioConstants#BUCKET_NAME과 MinioConstants#OBJECT_NAME 헤더를 쓰거나, MinioConstants#OBJECT_NAME 헤더만 써서 필터링할 수 있어요. true boolean
delimiter (consumer) 관심 있는 객체만 소비하도록 ListObjectsRequest에서 사용하는 구분자예요. String
destinationBucketName (consumer) 대상 버킷 이름이에요. String
destinationObjectName (consumer) 대상 객체 이름이에요. String
includeBody (consumer) true이면 exchange 본문이 파일 내용에 대한 스트림으로 설정돼요. false이면 헤더에 Minio 객체 메타데이터가 설정되지만 본문은 null이 돼요. 이 옵션은 autocloseBody 옵션과 아주 밀접하게 연관돼 있어요. includeBody를 true로, autocloseBody를 false로 설정하면 MinioObject 스트림을 닫는 건 호출자의 몫이 돼요. autocloseBody를 true로 설정하면 MinioObject 스트림이 자동으로 닫혀요. true boolean
includeFolders (consumer) ListObjectsRequest에서 폴더 포함(include folders)을 설정할 때 쓰는 플래그예요. false boolean
includeUserMetadata (consumer) ListObjectsRequest에서 사용자 메타데이터가 있는 객체를 가져올 때 쓰는 플래그예요. false boolean
includeVersions (consumer) ListObjectsRequest에서 버저닝이 적용된 객체를 가져올 때 쓰는 플래그예요. false boolean
length (consumer) offset부터의 객체 데이터 바이트 수예요. long
matchETag (consumer) 객체를 가져올 때 match ETag 파라미터를 설정해요. String
maxConnections (consumer) minio 클라이언트 설정에 maxConnections 파라미터를 설정해요. 60 int
maxMessagesPerPoll (consumer) 각 폴링에서 폴링 한도로 쓸 최대 메시지 수를 가져와요. 기본값은 10이고, 0이나 음수로 설정하면 무제한이 돼요. 10 int
modifiedSince (consumer) 객체를 가져올 때 modified since 파라미터를 설정해요. ZonedDateTime
moveAfterRead (consumer) 객체를 가져온 뒤 다른 버킷으로 옮겨요. 이 연산을 하려면 destinationBucket 옵션을 설정해야 해요. 버킷 복사 연산은 Exchange가 커밋된 경우에만 수행돼요. 롤백이 일어나면 객체는 옮겨지지 않아요. false boolean
notMatchETag (consumer) 객체를 가져올 때 not match ETag 파라미터를 설정해요. String
objectName (consumer) 지정한 객체 이름으로 버킷에서 객체를 가져와요. String
offset (consumer) 객체 데이터의 시작 바이트 위치예요. long
prefix (consumer) 객체 이름이 이 접두사로 시작해요. String
recursive (consumer) 디렉터리 구조 흉내 대신 재귀적으로 나열해요. false boolean
sendEmptyMessageWhenIdle (consumer) polling consumer가 파일을 하나도 폴링하지 못했을 때 이 옵션을 켜면 대신 빈 메시지(본문 없음)를 보내요. false boolean
startAfter (consumer) 이 객체 이름 이후의 객체들을 버킷에서 나열해요. String
unModifiedSince (consumer) 객체를 가져올 때 un modified since 파라미터를 설정해요. ZonedDateTime
useVersion1 (consumer) true이면 REST API 버전 1을 사용해요. false boolean
versionId (consumer) 객체를 삭제할 때 그 객체의 특정 version_ID를 설정해요. String
bridgeErrorHandler (consumer (advanced)) consumer를 Camel 라우팅 Error Handler에 연결(bridge)할 수 있게 해 줘요. 그러면 Camel consumer가 들어오는 메시지를 가져오려는 중에 (가능하다면) 발생한 예외들이 예외로 처리되지 않고 메시지로 처리되어 라우팅 Error Handler에서 다뤄져요. 중요: 이 기능은 서드파티 컴포넌트가 예외가 던져졌을 때 Camel에 알릴 수 있을 때만 가능해요. 일부 컴포넌트는 이를 내부에서만 처리해서 bridgeErrorHandler를 쓸 수 없어요. 다른 상황에서는 Camel 컴포넌트를 개선해서 서드파티 컴포넌트에 연결(hook)해 이를 가능하게 만들 수도 있어요. 기본적으로 consumer는 org.apache.camel.spi.ExceptionHandler로 예외를 처리하고, 예외는 WARN 또는 ERROR 레벨로 로그에 남고 무시돼요. false boolean
exceptionHandler (consumer (advanced)) consumer가 커스텀 ExceptionHandler를 쓰도록 해요. 참고로 bridgeErrorHandler 옵션이 켜져 있으면 이 옵션은 사용되지 않아요. 기본 동작은 consumer가 예외를 직접 처리하는 것이고, 예외는 WARN 또는 ERROR 레벨로 로그에 남고 무시돼요. ExceptionHandler
exchangePattern (consumer (advanced))
consumer가 exchange를 만들 때 exchange 패턴을 설정해요.

Enum values:

  • InOnly

  • InOut

| | ExchangePattern | | pollStrategy (consumer (advanced)) | Exchange가 만들어져 Camel에서 라우팅되기 전 폴링 과정에서 주로 일어나는 오류 처리를 제어할 수 있도록 커스텀 구현을 제공하게 해 주는 pluggable org.apache.camel.PollingConsumerPollingStrategy예요. | | PollingConsumerPollStrategy | | deleteAfterWrite (producer) | Minio 파일이 업로드된 뒤 파일 객체를 삭제해요. | false | boolean | | keyName (producer) | 엔드포인트 파라미터로 버킷 안 요소의 키 이름을 설정해요. | | String | | operation (producer) |

사용자가 업로드만 하지 않으려는 경우에 수행할 연산이에요.

Enum values:

  • copyObject

  • listObjects

  • deleteObject

  • deleteObjects

  • deleteBucket

  • listBuckets

  • getObject

  • getObjectRange

  • createDownloadLink

  • createUploadLink

| | MinioOperations | | pojoRequest (producer) | POJO 요청을 본문으로 쓸지 여부예요. | false | boolean | | storageClass (producer) | 요청에 설정할 스토리지 클래스예요. | | String | | lazyStartProducer (producer (advanced)) | producer를 lazy(첫 메시지 시점)로 시작할지 여부예요. lazy 시작을 쓰면 producer가 시작 중 실패해서 라우트 시작이 실패하는 상황에서도 CamelContext와 라우트를 시작할 수 있고, 시작 실패 처리를 Camel의 라우팅 에러 핸들러로 넘길 수 있어요. 다만 첫 메시지를 처리하는 시점에 producer를 만들고 시작하는 데 시간이 조금 걸려서 전체 처리 시간이 길어질 수 있다는 점은 유의하세요. | false | boolean | | customHttpClient (advanced) | 인가된 접근을 위한 커스텀 HTTP 클라이언트를 설정해요. | | OkHttpClient | | backoffErrorThreshold (scheduler) | backoffMultipler가 작동하기 전에 연속으로 일어나야 하는 오류 폴링(어떤 오류 때문에 실패한 폴링) 횟수예요. | | int | | backoffIdleThreshold (scheduler) | backoffMultipler가 작동하기 전에 연속으로 일어나야 하는 유휴(idle) 폴링 횟수예요. | | int | | backoffMultiplier (scheduler) | 유휴/오류가 연속으로 여러 번 일어나면 scheduled polling consumer가 백오프하도록 해요. 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) |

consumer는 폴링할 때 시작/완료 로그 한 줄을 남겨요. 이 옵션으로 그 로깅 레벨을 설정할 수 있어요.

Enum values:

  • TRACE

  • DEBUG

  • INFO

  • WARN

  • ERROR

  • OFF

| TRACE | LoggingLevel | | scheduledExecutorService (scheduler) | consumer가 사용할 커스텀/공유 스레드 풀을 설정할 수 있게 해 줘요. 기본적으로 각 consumer는 자기만의 단일 스레드 스레드 풀을 가져요. | | ScheduledExecutorService | | scheduler (scheduler) | camel-spring이나 camel-quartz 컴포넌트의 cron 스케줄러를 사용해요. 내장 스케줄러를 쓰려면 값으로 spring 또는 quartz를 사용하세요. | none | Object | | schedulerProperties (scheduler) | 커스텀 스케줄러나 Quartz, Spring 기반 스케줄러를 사용할 때 추가 프로퍼티를 설정해요. 접두사가 scheduler인 다중 값 옵션이에요. | | 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) | Amazon AWS의 Secret Access Key 또는 Minio Access Key예요. 설정하지 않으면 Camel이 익명 접근으로 서비스에 연결해요. | | String | | secretKey (security) | Amazon AWS의 Access Key Id 또는 Minio Secret Key예요. 설정하지 않으면 Camel이 익명 접근으로 서비스에 연결해요. | | String | | serverSideEncryption (security) | 서버 사이드 암호화예요. | | ServerSideEncryption | | serverSideEncryptionCustomerKey (security) | 객체를 복사/이동할 때 원본 객체에 적용하는 서버 사이드 암호화예요. | | CustomerKey |

메시지 헤더 (Message Headers)

Minio 컴포넌트는 다음과 같은 메시지 헤더들을 지원해요:

Name Description Default Type
CamelMinioBucketName (common) Constant: BUCKET_NAME Consumer: 이 객체가 담긴 버킷의 이름이에요. String
CamelMinioDestinationBucketName (producer) Constant: DESTINATION_BUCKET_NAME 현재 연산에 사용될 대상 버킷 이름이에요. String
CamelMinioContentControl (common) Constant: CACHE_CONTROL Producer: 이 객체의 content control이에요. Consumer: HTTP 요청/응답 체인에서 사용자가 캐싱 동작을 지정할 수 있게 해 주는 선택적 Cache-Control HTTP 헤더예요. String
CamelMinioContentDisposition (common) Constant: CONTENT_DISPOSITION Producer: 이 객체의 content disposition이에요. Consumer: 객체를 저장할 때 추천 파일 이름 같은 표현 정보를 지정하는 선택적 Content-Disposition HTTP 헤더예요. String
CamelMinioContentEncoding (common) Constant: CONTENT_ENCODING Producer: 이 객체의 content encoding이에요. Consumer: 객체에 어떤 콘텐츠 인코딩이 적용됐는지, 그리고 Content-Type 필드가 가리키는 미디어 타입을 얻으려면 어떤 디코딩 메커니즘을 적용해야 하는지 지정하는 선택적 Content-Encoding HTTP 헤더예요. String
CamelMinioContentLength (common) Constant: CONTENT_LENGTH Producer: 이 객체의 content length예요. Consumer: 연관된 객체의 크기를 바이트로 나타내는 Content-Length HTTP 헤더예요. Long
CamelMinioContentMD5 (common) Constant: CONTENT_MD5 Producer: 이 객체의 md5 체크섬이에요. Consumer: RFC 1864에 따른 연관 객체의 base64 인코딩 128비트 MD5 다이제스트예요(헤더는 제외한 콘텐츠). 이 데이터는 Minio가 받은 데이터가 호출자가 보낸 데이터와 같은지 확인하는 메시지 무결성 검사로 쓰여요. String
CamelMinioContentType (common) Constant: CONTENT_TYPE Producer: 이 객체의 content type이에요. Consumer: 연관된 객체에 저장된 콘텐츠의 타입을 나타내는 Content-Type HTTP 헤더예요. 이 헤더 값은 표준 MIME 타입이에요. String
CamelMinioETag (common) Constant: E_TAG Producer: 새로 업로드된 객체의 ETag 값이에요. Consumer: RFC 1864에 따른 연관 객체의 16진수 인코딩 128비트 MD5 다이제스트예요. 이 데이터는 호출자가 받은 데이터가 Minio가 보낸 데이터와 같은지 확인하는 무결성 검사로 쓰여요. String
CamelMinioObjectName (common) Constant: OBJECT_NAME Producer: 이 객체가 저장될 키 또는 현재 연산에 사용될 키예요. Consumer: 이 객체가 저장되어 있는 키예요. String
CamelMinioDestinationObjectName (producer) Constant: DESTINATION_OBJECT_NAME 현재 연산에 사용될 대상 키예요. String
CamelMinioLastModified (common) Constant: LAST_MODIFIED Producer: 이 객체의 마지막 수정 타임스탬프예요. Consumer: Minio가 연관 객체의 마지막 수정을 기록한 날짜와 시각을 나타내는 Last-Modified 헤더의 값이에요. Date
CamelMinioStorageClass (producer) Constant: STORAGE_CLASS 이 객체의 스토리지 클래스예요. String
CamelMinioVersionId (common) Constant: VERSION_ID Producer: 현재 연산에서 저장하거나 반환할 객체의 버전 ID예요. Consumer: 있으면 연관된 Minio 객체의 버전 ID예요. 버전 ID는 객체 버저닝이 켜진 Minio 버킷에 객체를 업로드할 때만 할당돼요. String
CamelMinioCannedAcl (producer) Constant: CANNED_ACL 객체에 적용될 canned ACL이에요. 허용 값은 com.amazonaws.services.s3.model.CannedAccessControlList를 보세요. String
CamelMinioOperation (producer) Constant: MINIO_OPERATION
수행할 연산이에요.

Enum values:

  • copyObject

  • listObjects

  • deleteObject

  • deleteObjects

  • deleteBucket

  • listBuckets

  • getObject

  • getPartialObject

  • createDownloadLink

  • createUploadLink

| | MinioOperations | | CamelMinioServerSideEncryption (common) Constant: SERVER_SIDE_ENCRYPTION | Producer: Minio 관리 키로 객체를 암호화할 때 서버 사이드 암호화 알고리즘을 설정해요. 예컨대 AES256을 쓰세요. Consumer: Minio 관리 키로 객체를 암호화할 때의 서버 사이드 암호화 알고리즘이에요. | | String | | CamelMinioExpirationTime (common) Constant: EXPIRATION_TIME | 만료 시간이에요. | | String | | CamelMinioReplicationStatus (common) Constant: REPLICATION_STATUS | 복제 상태예요. | | String | | CamelMinioOffset (producer) Constant: OFFSET | 오프셋이에요. | | String | | CamelMinioLength (producer) Constant: LENGTH | 길이예요. | | String | | CamelMinioPresignedURLExpirationTime (producer) Constant: PRESIGNED_URL_EXPIRATION_TIME | minio presigned url의 만료 시간(초)이에요. | | int | | CamelMinioOverrideBucketName (common) Constant: OVERRIDE_BUCKET_NAME | 이 객체가 저장될 버킷, 현재 연산에 사용될 버킷 또는 이 객체가 담긴 버킷을 덮어쓸 버킷 이름이에요. | | String |

참고 Minio에 접근하려면 레지스트리에 minioClient를 제공하거나 accessKey와 secretKey를 제공해야 해요.

사용법 (Usage)

배치 컨슈머 (Batch Consumer)

이 컴포넌트는 Batch Consumer를 구현해요.

덕분에 예컨대 이 배치에 메시지가 몇 개 있는지 알 수 있고, 그 수만큼 메시지를 Aggregator로 취합하게 할 수도 있어요.

참고 배치 프로퍼티는 각 객체의 내용을 가져오기 전에 설정돼요. 나열과 내용 가져오기 사이에 객체가 삭제되면(예: 다른 consumer가 삭제) 그 객체는 건너뛰어져요. 그래서 CamelBatchSize가 배치에서 라우팅된 exchange 수보다 클 수 있고, CamelBatchComplete가 true로 설정된 exchange가 하나도 없을 수도 있어요.

Minio 프로듀서 연산 (Minio Producer operations)

Camel-Minio 컴포넌트는 producer 쪽에서 다음 연산을 제공해요:

  • copyObject

  • deleteObject

  • deleteObjects

  • listBuckets

  • deleteBucket

  • listObjects

  • getObject (MinioObject 인스턴스를 반환해요)

  • getObjectRange (MinioObject 인스턴스를 반환해요)

  • createDownloadLink (presigned 다운로드 URL을 반환해요)

  • createUploadLink (presigned 업로드 URL을 반환해요)

고급 Minio 설정 (Advanced Minio configuration)

Camel 애플리케이션이 방화벽 뒤에서 동작하거나 MinioClient 인스턴스 설정을 더 세밀하게 제어하고 싶다면, 자기만의 인스턴스를 만들어 Camel minio 컴포넌트 설정에서 참조할 수 있어요:

  • Java

  • XML

  • YAML

from("minio://MyBucket?minioClient=#client&delay=5000&maxMessagesPerPoll=5")
  .to("mock:result");
<route>
  <from uri="minio://MyBucket?minioClient=#client&amp;delay=5000&amp;maxMessagesPerPoll=5"/>
  <to uri="mock:result"/>
</route>
- route:
    from:
      uri: minio://MyBucket
      parameters:
        minioClient: "#client"
        delay: 5000
        maxMessagesPerPoll: 5
      steps:
        - to:
            uri: mock:result

Minio 프로듀서 연산 예제 (Minio Producer Operation examples)

  • CopyObject: 이 연산은 객체를 한 버킷에서 다른 버킷으로 복사해요

  • Java

  • XML

  • YAML

from("direct:start")
    .setHeader("CamelMinioDestinationBucketName").constant("camelDestinationBucket")
    .setHeader("CamelMinioObjectName").constant("camelKey")
    .setHeader("CamelMinioDestinationObjectName").constant("camelDestinationKey")
    .to("minio://mycamelbucket?minioClient=#minioClient&operation=copyObject")
    .to("mock:result");
<route>
  <from uri="direct:start"/>
  <setHeader name="CamelMinioDestinationBucketName">
    <constant>camelDestinationBucket</constant>
  </setHeader>
  <setHeader name="CamelMinioObjectName">
    <constant>camelKey</constant>
  </setHeader>
  <setHeader name="CamelMinioDestinationObjectName">
    <constant>camelDestinationKey</constant>
  </setHeader>
  <to uri="minio://mycamelbucket?minioClient=#minioClient&amp;operation=copyObject"/>
  <to uri="mock:result"/>
</route>
- route:
    from:
      uri: direct:start
      steps:
        - setHeader:
            name: CamelMinioDestinationBucketName
            constant: camelDestinationBucket
        - setHeader:
            name: CamelMinioObjectName
            constant: camelKey
        - setHeader:
            name: CamelMinioDestinationObjectName
            constant: camelDestinationKey
        - to:
            uri: minio://mycamelbucket
            parameters:
              minioClient: "#minioClient"
              operation: copyObject
        - to:
            uri: mock:result

이 연산은 mycamelbucket 버킷에서 헤더 camelDestinationKey로 지정한 이름의 객체를 camelDestinationBucket 버킷으로 복사해요.

  • DeleteObject: 이 연산은 버킷에서 객체를 삭제해요

  • Java

  • XML

  • YAML

from("direct:start")
    .setHeader("CamelMinioObjectName").constant("camelKey")
    .to("minio://mycamelbucket?minioClient=#minioClient&operation=deleteObject")
    .to("mock:result");
<route>
  <from uri="direct:start"/>
  <setHeader name="CamelMinioObjectName">
    <constant>camelKey</constant>
  </setHeader>
  <to uri="minio://mycamelbucket?minioClient=#minioClient&amp;operation=deleteObject"/>
  <to uri="mock:result"/>
</route>
- route:
    from:
      uri: direct:start
      steps:
        - setHeader:
            name: CamelMinioObjectName
            constant: camelKey
        - to:
            uri: minio://mycamelbucket
            parameters:
              minioClient: "#minioClient"
              operation: deleteObject
        - to:
            uri: mock:result

이 연산은 mycamelbucket 버킷에서 camelKey 객체를 삭제해요.

  • ListBuckets: 이 연산은 이 리전에서 이 계정의 버킷들을 나열해요

  • Java

  • XML

  • YAML

from("direct:start")
    .to("minio://mycamelbucket?minioClient=#minioClient&operation=listBuckets")
    .to("mock:result");
<route>
    <from uri="direct:start"/>
    <to uri="minio://mycamelbucket?minioClient=#minioClient&amp;operation=listBuckets"/>
    <to uri="mock:result"/>
</route>
- route:
    from:
      uri: direct:start
      steps:
        - to:
            uri: minio://mycamelbucket
            parameters:
              minioClient: "#minioClient"
              operation: listBuckets
        - to:
            uri: mock:result

이 연산은 이 계정의 버킷들을 나열해요

  • DeleteBucket: 이 연산은 URI 파라미터나 헤더로 지정한 버킷을 삭제해요

  • Java

  • XML

  • YAML

from("direct:start")
    .to("minio://mycamelbucket?minioClient=#minioClient&operation=deleteBucket")
    .to("mock:result");
<route>
    <from uri="direct:start"/>
    <to uri="minio://mycamelbucket?minioClient=#minioClient&amp;operation=deleteBucket"/>
    <to uri="mock:result"/>
</route>
- route:
    from:
      uri: direct:start
      steps:
        - to:
            uri: minio://mycamelbucket
            parameters:
              minioClient: "#minioClient"
              operation: deleteBucket
        - to:
            uri: mock:result

이 연산은 mycamelbucket 버킷을 삭제해요

  • ListObjects: 이 연산은 특정 버킷의 객체를 나열해요

  • Java

  • XML

  • YAML

from("direct:start")
    .to("minio://mycamelbucket?minioClient=#minioClient&operation=listObjects")
    .to("mock:result");
<route>
    <from uri="direct:start"/>
    <to uri="minio://mycamelbucket?minioClient=#minioClient&amp;operation=listObjects"/>
    <to uri="mock:result"/>
</route>
- route:
    from:
      uri: direct:start
      steps:
        - to:
            uri: minio://mycamelbucket
            parameters:
              minioClient: "#minioClient"
              operation: listObjects
        - to:
            uri: mock:result

이 연산은 mycamelbucket 버킷의 객체들을 나열해요

  • GetObject: 이 연산은 특정 버킷에서 객체 하나를 가져와요

  • Java

  • XML

  • YAML

from("direct:start")
    .setHeader("CamelMinioObjectName").constant("camelKey")
    .to("minio://mycamelbucket?minioClient=#minioClient&operation=getObject")
    .to("mock:result");
<route>
  <from uri="direct:start"/>
  <setHeader name="CamelMinioObjectName">
    <constant>camelKey</constant>
  </setHeader>
  <to uri="minio://mycamelbucket?minioClient=#minioClient&amp;operation=getObject"/>
  <to uri="mock:result"/>
</route>
- route:
    from:
      uri: direct:start
      steps:
        - setHeader:
            name: CamelMinioObjectName
            constant: camelKey
        - to:
            uri: minio://mycamelbucket
            parameters:
              minioClient: "#minioClient"
              operation: getObject
        - to:
            uri: mock:result

이 연산은 mycamelbucket 버킷의 camelKey 객체에 해당하는 MinioObject 인스턴스를 반환해요.

  • GetObjectRange: 이 연산은 특정 버킷에서 객체의 구간 하나를 가져와요

  • Java

  • XML

  • YAML

from("direct:start")
    .setHeader("CamelMinioObjectName").constant("camelKey")
    .setHeader("CamelMinioOffset").constant("0")
    .setHeader("CamelMinioLength").constant("9")
    .to("minio://mycamelbucket?minioClient=#minioClient&operation=getObjectRange")
    .to("mock:result");
<route>
  <from uri="direct:start"/>
  <setHeader name="CamelMinioObjectName">
    <constant>camelKey</constant>
  </setHeader>
  <setHeader name="CamelMinioOffset">
    <constant>0</constant>
  </setHeader>
  <setHeader name="CamelMinioLength">
    <constant>9</constant>
  </setHeader>
  <to uri="minio://mycamelbucket?minioClient=#minioClient&amp;operation=getObjectRange"/>
  <to uri="mock:result"/>
</route>
- route:
    from:
      uri: direct:start
      steps:
        - setHeader:
            name: CamelMinioObjectName
            constant: camelKey
        - setHeader:
            name: CamelMinioOffset
            constant: "0"
        - setHeader:
            name: CamelMinioLength
            constant: "9"
        - to:
            uri: minio://mycamelbucket
            parameters:
              minioClient: "#minioClient"
              operation: getObjectRange
        - to:
            uri: mock:result

이 연산은 mycamelbucket 버킷의 camelKey 객체에 해당하는 MinioObject 인스턴스를 반환하고, 0부터 9까지의 바이트를 담고 있어요.

  • createDownloadLink: 이 연산은 GET 메서드로 파일을 내려받을 수 있는 presigned url을 반환해요

  • Java

  • XML

  • YAML

from("direct:start")
    .setHeader("CamelMinioObjectName").constant("camelKey")
    .setHeader("CamelMinioPresignedURLExpirationTime").constant(3600)
    .to("minio://mycamelbucket?minioClient=#minioClient&operation=createDownloadLink")
    .to("mock:result");
<route>
  <from uri="direct:start"/>
  <setHeader name="CamelMinioObjectName">
    <constant>camelKey</constant>
  </setHeader>
  <setHeader name="CamelMinioPresignedURLExpirationTime">
    <constant resultType="java.lang.Integer">3600</constant>
  </setHeader>
  <to uri="minio://mycamelbucket?minioClient=#minioClient&amp;operation=createDownloadLink"/>
  <to uri="mock:result"/>
</route>
- route:
    from:
      uri: direct:start
      steps:
        - setHeader:
            name: CamelMinioObjectName
            constant: camelKey
        - setHeader:
            name: CamelMinioPresignedURLExpirationTime
            constant: 3600
        - to:
            uri: minio://mycamelbucket
            parameters:
              minioClient: "#minioClient"
              operation: createDownloadLink
        - to:
            uri: mock:result
  • createUploadLink: 이 연산은 PUT 메서드로 파일을 업로드할 수 있는 presigned url을 반환해요

  • Java

  • XML

  • YAML

from("direct:start")
    .setHeader("CamelMinioObjectName").constant("camelKey")
    .setHeader("CamelMinioPresignedURLExpirationTime").constant(3600)
    .to("minio://mycamelbucket?minioClient=#minioClient&operation=createUploadLink")
    .to("mock:result");
<route>
  <from uri="direct:start"/>
  <setHeader name="CamelMinioObjectName">
    <constant>camelKey</constant>
  </setHeader>
  <setHeader name="CamelMinioPresignedURLExpirationTime">
    <constant resultType="java.lang.Integer">3600</constant>
  </setHeader>
  <to uri="minio://mycamelbucket?minioClient=#minioClient&amp;operation=createUploadLink"/>
  <to uri="mock:result"/>
</route>
- route:
    from:
      uri: direct:start
      steps:
        - setHeader:
            name: CamelMinioObjectName
            constant: camelKey
        - setHeader:
            name: CamelMinioPresignedURLExpirationTime
            constant: 3600
        - to:
            uri: minio://mycamelbucket
            parameters:
              minioClient: "#minioClient"
              operation: createUploadLink
        - to:
            uri: mock:result

createDownLink와 createUploadLink는 기본 만료가 3600초이고, 헤더 CamelMinioPresignedURLExpirationTime(초 단위 값)을 설정하면 바꿀 수 있어요

버킷 자동 생성 (Bucket Auto-creation)

autoCreateBucket 옵션으로 사용자는 Minio 버킷이 없을 때 버킷 자동 생성을 막을 수 있어요. 이 옵션의 기본값은 true예요. false로 설정하면 Minio에 존재하지 않는 버킷에 대한 연산은 성공하지 못하고 오류가 반환돼요.

레지스트리에서 Minio 클라이언트 자동 감지 (Automatic detection of a Minio client in registry)

컴포넌트는 레지스트리에 Minio 빈이 있는지 탐지할 수 있어요. 그 타입의 유일한 인스턴스라면 클라이언트로 사용되고, 위 예제처럼 URI 파라미터로 정의하지 않아도 돼요. 엔드포인트를 더 똑똑하게 설정할 때 정말 유용할 수 있어요.

버킷 간 내용 옮기기 (Moving stuff between a bucket and another bucket)

이 컴포넌트의 copyObject 기능을 쓰지 않고 한 버킷에서 내용을 소비해 다른 버킷으로 옮기고 싶은 사용자들도 있어요. 여기 해당한다면 consumer의 들어오는 exchange에서 bucketName 헤더를 제거하는 걸 잊지 마세요. 그렇지 않으면 파일이 항상 같은 원본 버킷에 덮어써져요.

MoveAfterRead consumer 옵션 (MoveAfterRead consumer option)

deleteAfterRead 외에 moveAfterRead라는 옵션이 하나 더 추가됐어요. 이 옵션을 켜면 소비한 객체가 삭제만 되는 게 아니라 대상 destinationBucket으로 옮겨져요. 이때는 destinationBucket 옵션을 지정해야 해요. 예시:

  • Java

  • XML

  • YAML

from("minio://mycamelbucket?minioClient=#minioClient&moveAfterRead=true&destinationBucketName=myothercamelbucket")
  .to("mock:result");
<route>
  <from uri="minio://mycamelbucket?minioClient=#minioClient&amp;moveAfterRead=true&amp;destinationBucketName=myothercamelbucket"/>
  <to uri="mock:result"/>
</route>
- route:
    from:
      uri: minio://mycamelbucket
      parameters:
        minioClient: "#minioClient"
        moveAfterRead: true
        destinationBucketName: myothercamelbucket
      steps:
        - to:
            uri: mock:result

이 경우 소비한 객체들은 myothercamelbucket 버킷으로 옮겨지고 원본 버킷에서는 삭제돼요(deleteAfterRead가 기본값인 true로 설정돼 있기 때문이에요).

본문으로 POJO 사용하기 (Using a POJO as body)

옵션이 여러 개라서 Minio 요청을 만드는 게 복잡할 때가 있어요. 그래서 POJO를 본문으로 쓸 수 있는 방법을 제공해요. Minio에서는 제출할 수 있는 연산이 여러 가지인데, List 요청을 예로 들면 다음처럼 할 수 있어요:

Java 전용: POJO 요청 본문에 Minio Java SDK 빌더 API를 사용해요

from("direct:minio")
     .setBody(ListObjectsArgs.builder()
                    .bucket(bucketName)
                    .recursive(getConfiguration().isRecursive()))
     .to("minio://test?minioClient=#minioClient&operation=listObjects&pojoRequest=true");

이렇게 하면 이 연산에만 관련된 헤더와 옵션을 따로 넘기지 않고도 요청을 곧바로 전달할 수 있어요.

의존성 (Dependencies)

Maven 사용자는 pom.xml에 다음 의존성을 추가해야 해요.

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-minio</artifactId>
    <version>${camel-version}</version>
</dependency>

여기서 ${camel-version}은 실제 Camel 버전으로 바꿔야 해요.

더 알아보기 (Learn more)

  • 이 컴포넌트는 폐기 예정이라 향후 릴리스에서 제거될 수 있으니, S3 호환 스토리지라면 AWS S3 Storage Service 컴포넌트를 대안으로 검토해 보세요.
  • minioClient를 레지스트리에 두고 자동 감지에 맡기거나 accessKey/secretKey로 직접 설정하는 방법은 위의 고급 설정·레지스트리 자동 감지 섹션에서 확인할 수 있어요.
  • moveAfterRead·deleteAfterRead 조합, presigned 링크 연산, POJO 요청 본문 같은 패턴은 위의 사용법 섹션 예제를 참고하세요.