yoncho`s blog
[RabbitMQ] 6. Queue 옵션으로 Message Control 본문
1. 옵션(max-length, max-lenght-byte, reject-publish(overflow), max-message-ttl)
2. 예제
3. 참조
1. 옵션
AssertQueue
- MAX-LENGTH
channel.assertQueue(queueName, { arguments : {'x-max-length': 100} });
Queue에 쌓을 수 있는 Messag 최대 수를 지정하는 옵션.
Queue를 지정할 때 arguments로 ‘x-max-length’ 값에 원하는 길이를 지정하면
Queue에 최대 해당 길이만큼 데이터를 가지고 있을 수 있고 해당 길이를 초과한 경우 기본적으로 가장 오래된 Message부터 지우게된다.
- MAX-LENGTH-BYTES
channel.assertQueue(queueName, { arguments : {'x-max-length-bytes': 100} });
Queue에 쌓을 수 있는 Message의 총 Byte를 지정할 수 있다.
- REJECT-PUBLISH
channel.assertQueue(queueName, { arguments : {'x-overflow': 'reject-publish'} });
Queue에 쌓을 수 있는 Messag 최대 수를 초과했을 때 Queue에 더 이상 Publish되지 않게 막는 옵션
Queue를 지정할 때 ‘x-max-length’ 사용하고 위 옵션을 주게 되면 Queue에 먼저 쌓인 Message부터 총 x-max-length개 만큼만 가지고 있다.
- MAX-MESSAGE-TTL
*TTL : Time-To-Live, 메시지 유효 시간
channel.assertQueue(queueName, { arguments : {'x-messsag-ttl': 5000} });
Queue에 쌓을 수 있는 Message의 유효 시간 옵션, 해당 시간이 지나도 Consume이 되지 않으면 Queue에서 자동 삭제된다.
Publish
- MANDATORY
channel.publish(exchange, routingKey, Buffer.from(message), {mandatory:true});
RabbitMQ에게 메시지를 반드시 라우팅할 수 있는 라우팅 키(routing key)와 매칭되는 큐가 없는 경우에 대한 처리 방법을 지정 옵션
- true : 메시지가 라우팅할 수 있는 큐가 없는 경우에도 RabbitMQ는 해당 메시지를 반환합니다. 반환된 메시지는 basic.return 이벤트를 통해 Publisher에게 전달
- false : 메시지가 라우팅할 수 있는 큐가 없는 경우 RabbitMQ는 해당 메시지를 무시하고 삭
- PERSISTENT
channel.publish(exchange, routingKey, Buffer.from(message), {persistent: true});
메시지를 영구적으로 저장할지 여부를 지정합니다. 영구적인 메시지는 RabbitMQ가 재시작되더라도 유지되며, 메시지 유실을 방지 옵션
- true : 메시지가 디스크에 저장되고 영구적으로 유지됩니다. 메시지는 디스크에 저장되기 때문에 재시작 이후에도 유실되지 않음.
- false : 메시지는 메모리에만 저장되며 재시작 시에는 유실될 수 있음.
2. 예제
Publisher.js - AssertQueue (with Option)
await channel.assertQueue(queueName,
{arguments: {
'x-max-length':10, //Queue에 최대 10개 Message 적재
'x-overflow':'reject-publish', //Queue 최대 적재를 over했을 시, Publish되는 Message 무시
'x-message-ttl':5000, //Queue에 적재될 Message가 Consume이 안된다면 최대 유효시간
durable: false} });
await channel.bindQueue(queueName, exchange, routingKey);
channel.publish(exchange, routingKey, Buffer.from(message), {mandatory:true, persistent: true});
Result
- Normal Flow
- Max Queue Over (reject-publish) Flow
- Message TTL Over Flow
'기술, 나의 공부를 공유합니다. > MQTT' 카테고리의 다른 글
[RabbitMQ] 7. Code Example (0) | 2023.06.24 |
---|---|
[RabbitMQ] 5. RabbitMQ Broker ShutDown 대비 (0) | 2023.06.24 |
[RabbitMQ] 4. Clustering & Mirroring (0) | 2023.06.24 |
[RabbitMQ] 3. Connection & Channel (0) | 2023.06.24 |
[RabbitMQ] 2. Queue (0) | 2023.06.24 |