2020에 작성한 노트를 옮겨 적은 것입니다.
STOMP does not, however, deal in queues and topics—it uses a SEND semantic with a “destination” string. The broker must map onto something that it understands internally such as a topic, queue, or exchange. Consumers then SUBSCRIBE to those destinations. Since those destinations are not mandated in the specification, different brokers may support different flavours of destination. So, it’s not always straightforward to port code between brokers.
니가 아는 그거다. Skip
{noAck: true}
모드에서는 브로커가 메세지 보낸 직후 marks it for deletion{noAck: false}
로, 특정 워커에서 브로거에게 '이 메세지 받았고 프로세스 다 했어' 라고 알림sudo rabbitmqctl list_queues name messages_ready messages_unacknowledged
channel.assertQueue('task_queue', {durable: true});
channel.sendToQueue(queue, Buffer.from(msg), {persistent: true});
channel.prefetch(1)
: RabbitMQ가 한번에 하나를 넘는 메세지 전달하지 않도록 설정.direct
: binding-key에 따라 특정 큐에게 전달topic
: pattern으로 라우팅headers
: key-value를 통해서 라우팅fanout
: 모든 큐에게 broadcastdurable
: 브로커 재시작하면 남아있음 ↔ transient
auto-delete
: 마지막 큐 연결이 해제되면 삭제channel.queue_bind(exchange='logs', queue=result.method.queue)
result = channel.queue_declare(queue='', exclusive=True)
result.method.queue
에 random queue name 들어간다.exclusive=true
는 consumer 커넥션 종료 시 큐 지우도록 하는 것.channel.bindQueue(queue, exchange, routingKey)
: 라우팅 키로 특정 큐에 바인딩한다*
: exactly one word#
: zero or more wordsRequest/reply pattern
Remote computer에서 어떤 함수를 돌리고 싶을때.
잘 모르고 쓰면 낭패보기 쉽다
동작 방식
장점