반응형
1. Queue 생성
queue_declare()
- 큐가 존재하지 않으면 큐를 생성한다
// hello 라는 이름의 큐 선언
/*
name: 큐 이름 (hello)
passive: false
durable: true // the queue will survive server restarts
exclusive: false // the queue can be accessed in other channels
auto_delete: false //the queue won't be deleted once the channel is closed.
*/
$channel->queue_declare('hello', false, false, false, false);
| 인수 | 설명 | 비고 |
| name | 큐 이름 | amq로 시작하는 큐 이름은 생성 할 수 없다 |
| passive | true : hello 라는 큐가 있으면 Queue.declare_ok 없으면 오류 false : hello 라는 큐가 없으면 생성해줌 |
|
| durable | ture : RabbitMQ 서버가 다시 시작 되도 큐는 살아있음 false : 서버가 죽으면 큐도 삭제됨 |
|
| exclusive | true : 독점 큐 선언 (임시 큐) 프로세스 (프로듀서, 컨슈머)가 종료되면 큐 삭제됨 독립적인 큐 혼자 쓸 건지 |
프로듀서는 단발성으로 프로세스가 바로 종료 되기때문에 독점 큐 선언은 컨슈머에서 선언해야함 |
| auto_delete | true : 컨슈머의 채널이 닫혔을 때 큐 삭제됨 false : 컨슈머의 채널이 닫혀도 큐는 삭제 안됨 |
- 큐 이름이 빈 값 이면 이름을 자동으로 생성함. ex)amq.gen-JzTY20BRgKO-HjmUJj0wLg
- 최초 실행하면 RabbitMQ에 hello 라는 큐가 없기 때문에 큐를 먼저 생성해줍니다.
- 어드민에서 hello 라는 큐가 생성된 걸 볼 수 있음
참고!!
// 처음에 아래와 같이 hello 큐를 생성
$channel->queue_declare('hello', false, false, false, false);
// 만약 옵션 값을 변경 한다면 ??
$channel->queue_declare('hello', false, true, false, false); // 오류 발생!!!
이미 hello 라는 큐가 있어서 오류 발생함.
이럴 때는 큐이름을 변경 하던가, 어드민에서 hello 큐를 삭제 해야 함
2. exchange 선언 (생성)
exchange_declare()
/*
name: $exchange
type: direct
passive: false
durable: true // the exchange will survive server restarts
auto_delete: false //the exchange won't be deleted once the channel is closed.
*/
$channel->exchange_declare('Route', AMQPExchangeType::DIRECT, false, true, true);
| 인수 | 설명 |
| name | exchange 이름 |
| type | 4개의 타입이 있음 |
| passive | true : exchange (name)가 없으면 예외 발생. 있으면 아무것도 하지 않음 false : 없으면 새로 선언 |
| durable | ture : RabbitMQ 서버가 다시 시작 되도 exchange 는 살아있음 false : 서버가 죽으면 exchange 도 삭제됨 |
| auto_delete | true : 큐 auto_delete = true 해줘야 역할을 제대로 할 수 있음 (어드민에서 수동으로 바인딩을 끊지 않으면 해당 exchange 는 계속 살아있음) |
3. 큐 바인딩
// 인수에 대한 설명은 생략합니다.
$channel->queue_bind($queue_name, $exchange_name, $route_key);
- basic_publish() 에서 직접 큐로 연결이 안되고 exchange 를 사용 해야 한다
- queue_bind() 를 사용하여 queue와 exchange 를 연결
- 프로듀서에서 메세지를 전달 할 때 큐로 도달하기 위한 통로 개념으로 이해하면 될 듯?
$route_key
- exchange direct 타입 사용 시 이용되고 route_key 를 지정할 경우 basic_publish() 에서 지정한 route_key ****를 넣어야 메세지가 큐에 도달함
$channel->queue_declare("hello", false, false, true, false);
$channel->queue_bind('hello', 'direct_logs','route_test_key');
$channel->exchange_declare('direct_logs', 'direct', false, false, false);
$channel->basic_publish($msg, 'direct_logs', 'route_test_key');
반응형
'기술, 개발 > RabbitMQ' 카테고리의 다른 글
| Dead Letter Exchange (메세지 만료) (0) | 2025.09.10 |
|---|---|
| 컨슈머 병렬 처리, 메세지 손실 방지 (0) | 2025.09.10 |
| RabbitMQ 개념 (0) | 2025.09.10 |
| RabbitMQ 최신 버전 우분투 설치 (0) | 2025.09.10 |
| RabbitMQ 도커 설치 (0) | 2025.09.10 |