개발일기장

Node.js에서 RabbitMQ(AMQP) 사용하기. Publish (2) 본문

node.js

Node.js에서 RabbitMQ(AMQP) 사용하기. Publish (2)

게슬 2021. 7. 28. 10:40
728x90

2021.07.28 - [node.js] - Node.js에서 RabbitMQ(AMQP) 사용하기. 브라우저에서 설정 (1)

 

Node.js에서 RabbitMQ(AMQP) 사용하기. 브라우저에서 설정 (1)

이거 해보려고 이것저것 찾아봤는데 너무 단순하기도 하고, 연결된게 없어서 (사실 내가 귀찮아서 구글링 덜함) 직접 해봤음.. 일단 윈도우에서 rabiitmq설치하고 뭐 그러는거 복잡하기도하고 좀

tlqckd0.tistory.com

여기서 이어지는 글입니다.

 

3초마다 메시지를 보내는 Publish를 만들어보자.

 

1. 일단 메시지를 보내는 함수를 만든다.

const publishToChannel = (channel, { routingKey, exchangeName, data }) => {
    return new Promise((resolve, reject) => {
        //1. Publish할 때는 Exchange이름, RoutingKey를 넣어주고.
        channel.publish(exchangeName,routingKey,    
            
            // 2. 메시지를 보낼때는 직렬화 후 버퍼에 담아서.      
            Buffer.from(JSON.stringify(data), 'utf-8'),

            // 3. 설정 후
            { persistent: true },

            // 4. 메시지 보낸 이후 Promise return
            (err, ok) => {
                if (err) {
                    return reject(err);
                }
                resolve();
            }
        );
    });
};

만들어진 channel이랑, Publish할 때 필요한 데이터들을 받는다.

 

 

2. 채널을 연결하고 3초마다 함수를 실행하자.

const sendMessage = async () => {
    const connection = await amqp.connect(amqpURL);
    const channel = await connection.createConfirmChannel();
    let counter = 1;

    await setInterval(() => {
        //메시지 카운터는 늘어나고..
        const msg = `hello ${counter++}`;
        console.log(msg);
        publishToChannel(channel, {
            routingKey: 'GoodBye',
            exchangeName: 'MyTest',
            data: { Message: msg },
        });
        //3초마다 전송
    }, 3000);
};

이전 포스트에서 설정한 Exchange 'MyTest', 에 대한 Routing Key 'GoodBye'를 적어주고, 메시지는 카운터를 증가시켜주는 방향으로 했다.

 

전체 코드 

const amqp = require('amqplib');

const amqpURL = 'amqp://guest:guest@localhost:5672';

const sendMessage = async () => {
    const connection = await amqp.connect(amqpURL);
    const channel = await connection.createConfirmChannel();
    let counter = 1;

    await setInterval(() => {
        //메시지 카운터는 늘어나고..
        const msg = `hello ${counter++}`;
        console.log(msg);
        publishToChannel(channel, {
            routingKey: 'GoodBye',
            exchangeName: 'MyTest',
            data: { Message: msg },
        });
        //3초마다 전송
    }, 3000);
};

const publishToChannel = (channel, { routingKey, exchangeName, data }) => {
    return new Promise((resolve, reject) => {
        //1. Publish할 때는 Exchange이름, RoutingKey를 넣어주고.
        channel.publish(exchangeName,routingKey,    

            // 2. 메시지를 보낼때는 직렬화 후 버퍼에 담아서.      
            Buffer.from(JSON.stringify(data), 'utf-8'),

            // 3. 설정 후
            { persistent: true },

            // 4. 메시지 보낸 이후 Promise return
            (err, ok) => {
                if (err) {
                    return reject(err);
                }
                resolve();
            }
        );
    });
};

sendMessage();

 

그리고 실행시켜보자.

 

스크립트 실행

이렇게 뜰것이다.

13까지 보내고 종료

 

그리고 브라우저로 가서 Queues 탭으로 가서 아까만든 MyTestRabbit Queue로 가보면

Queues 탭
MyTestRabbit Queue

받았던 메시지가 13개 준비되어 있다고 나온다.

이러면 문제없이 잘 된것

 

이것도 너무 길어서 다음 포스트에 Consume하는걸로...

728x90
Comments