좋아요, 정우님. 😄
rabbitmq-c 라이브러리의 amqp_basic_consume() 함수는 RabbitMQ 큐에서 메시지를 구독(consume)할 때 사용하는 핵심 함수입니다.
각 인자와 의미를 하나씩 자세히 설명드리겠습니다.
amqp_basic_consume(
amqp_connection_state_t state, // 연결
amqp_channel_t channel, // 채널
amqp_bytes_t queue, // 큐 이름
amqp_bytes_t consumer_tag, // 컨슈머 태그
amqp_boolean_t no_local, // 다른 연결 메시지 제외 여부
amqp_boolean_t no_ack, // auto_ack 여부
amqp_boolean_t exclusive, // 큐 독점 여부
amqp_table_t arguments // 추가 옵션
);
state – 연결 객체amqp_connection_state_tamqp_new_connection() 이후 사용amqp_connection_state_t conn = amqp_new_connection();
channel – 채널 번호amqp_channel_t (보통 int)queue – 큐 이름amqp_bytes_tamqp_bytes_t queue = amqp_cstring_bytes("test_queue");
consumer_tag – 컨슈머 태그amqp_bytes_tamqp_bytes_t consumer_tag = amqp_cstring_bytes("my_consumer");
basic.cancel) 시 사용no_local – 다른 연결 메시지 제외타입: amqp_boolean_t
의미: 자기 연결에서 publish한 메시지를 받지 않음
RabbitMQ 서버 대부분 구현에서는 0으로 설정, 잘 안 쓰임
값:
no_ack – auto_ack 설정타입: amqp_boolean_t
의미: 메시지 수신 시 서버에서 자동으로 Ack 처리
값:
amqp_basic_ack() 호출)주의: auto_ack=true 상태에서 amqp_basic_ack() 호출하면 unknown delivery tag 오류 발생
exclusive – 큐 독점 여부타입: amqp_boolean_t
의미: 컨슈머가 큐를 독점
값:
주로 RPC reply 큐나 임시 큐에서 사용
arguments – 추가 옵션amqp_table_tamqp_empty_tableamqp_table_t args = amqp_empty_table;
amqp_basic_consume(
conn, // 연결
1, // 채널 1
amqp_cstring_bytes("my_queue"),
amqp_empty_bytes, // consumer_tag 자동 생성
0, // no_local = false
0, // no_ack = false -> 수동 ack
0, // exclusive = false
amqp_empty_table // 추가 옵션 없음
);
amqp_basic_ack(conn, 1, delivery_tag, 0);
💡 정리
amqp_basic_consume()는 큐 구독 핵심 함수원하시면 제가 이걸 기반으로 ffmpegd C 데몬 + RabbitMQ consumer 예제를 만들어서
모든 실전용 구조로 보여드릴 수도 있습니다.
만들어 드릴까요?