amqp_queue_declare 함수 설명

백엔드&인프라 추종자·2025년 11월 11일

좋아요, 정우님. 😊
rabbitmq-c에서 사용하는

amqp_queue_declare(conn, 1, queue, 0, 0, 0, 1, amqp_empty_table);

각 인자의 의미를 하나씩 자세히 설명드리겠습니다.


함수 시그니처

amqp_queue_declare(
    amqp_connection_state_t state,
    amqp_channel_t channel,
    amqp_bytes_t queue,
    amqp_boolean_t passive,
    amqp_boolean_t durable,
    amqp_boolean_t exclusive,
    amqp_boolean_t auto_delete,
    amqp_table_t arguments
);

1️⃣ state

  • 타입: amqp_connection_state_t
  • 설명: RabbitMQ 연결 객체
  • 생성: conn = amqp_new_connection() 후 사용

2️⃣ channel

  • 타입: amqp_channel_t
  • 설명: 큐 선언할 채널 번호
  • 예: 1번 채널에서 큐를 선언
  • AMQP에서는 1 TCP 연결에 여러 채널을 만들어 독립적으로 큐/교환기 관리 가능

3️⃣ queue

  • 타입: amqp_bytes_t
  • 설명: 선언할 큐 이름
  • 예: amqp_cstring_bytes("test_queue")
  • 빈 문자열 ""로 주면 RabbitMQ가 임시 이름 생성

4️⃣ passive

  • 타입: amqp_boolean_t
  • 설명: 큐가 이미 존재하는지 확인만 하고 새로 생성하지 않음
  • 값: 0 = 새로 생성 가능, 1 = 존재하지 않으면 오류 발생
  • 예: 기존 큐만 확인하고 싶을 때 1 사용

5️⃣ durable

  • 타입: amqp_boolean_t
  • 설명: 큐가 서버 재시작 시에도 유지될지 여부
  • 값: 0 = 비영속, 1 = 영속 큐
  • 영속 큐는 서버 재시작 시에도 남음, 단 디스크 I/O 증가

6️⃣ exclusive

  • 타입: amqp_boolean_t
  • 설명: 큐를 현재 연결 전용으로 제한할지 여부
  • 값: 0 = 모든 연결 접근 가능, 1 = 선언한 연결만 사용 가능
  • 주로 임시 큐나 RPC reply 큐에서 사용

7️⃣ auto_delete

  • 타입: amqp_boolean_t
  • 설명: 마지막 컨슈머가 큐를 떠나면 자동 삭제 여부
  • 값: 0 = 유지, 1 = 자동 삭제
  • 임시 작업용 큐에서 주로 1 사용

8️⃣ arguments

  • 타입: amqp_table_t
  • 설명: 추가 옵션(TTL, max-length 등)
  • 예: amqp_empty_table = 기본값, 옵션 없음
  • 필요 시 아래처럼 확장 가능
amqp_table_t args = amqp_empty_table;
args.num_entries = 1;
args.entries[0].key = amqp_cstring_bytes("x-message-ttl");
args.entries[0].value.kind = AMQP_FIELD_KIND_I32;
args.entries[0].value.value.i32 = 60000; // 1분 TTL

🔹 예제 설명

amqp_queue_declare(
    conn,                // 연결
    1,                   // 채널 1
    queue,               // "test_queue"
    0,                   // passive = 새로 생성 가능
    0,                   // durable = 서버 재시작 후 삭제됨
    0,                   // exclusive = 모든 연결 접근 가능
    1,                   // auto_delete = 마지막 컨슈머 떠나면 삭제
    amqp_empty_table     // arguments = 추가 옵션 없음
);
  • 동작: test_queue를 생성, 임시/비영속 큐, 마지막 소비자 떠나면 자동 삭제

원하시면 제가 이거를 포함해서 ffmpegd C 데몬 + RabbitMQ consumer + stdout 로그 + signal 처리 통합 예제도 만들어 드릴 수 있습니다.
그거 만들어 드릴까요?

profile
AI 답변 글을 주로 올립니다.

0개의 댓글