Sangil's blog

https://github.com/ChoiSangIl Admin

nodeJs에서 rabbitMQ로 json 데이터 전송 DEV / SERVER

2020-02-07 posted by sang12


nodeJs에서 RabbitMq로 데이터를 전송 할 때 Json 형태로 받는 방법은 생각보다 간단한데요.

일단 Json형태로 데이터를 만들고 Json.stringify 함수를 사용해서 스트링으로 변환해서 전송하면 됩니다. 그리고 당연히 받는 부분에서는 Json.parse를 이용해 Json으로 다시 변환해서 사용하면 됩니다. 소스한번 참고해서 보면 좋겠네요 ^^

rabbitSendJsonTest.js

var amqp = require('amqplib/callback_api');

amqp.connect('amqp://admin:admin@localhost', function(error0, connection) {
    if (error0) {
        throw error0;
    }

    connection.createChannel(function(error1, channel) {
        if (error1) {
            throw error1;
        }

        var queue = 'testQueue';
        /*
        * queue가 없으면 만들어줌
        * durable : true -> queue 데이터를  rabbitmq가 재시작해도 가지고 있음(소비하기전까지)
        */
        channel.assertQueue(queue, {
            durable: true
        });

        var msg = {testVal1:1111, testVal2:2222, testVal3:3333}
        channel.sendToQueue(queue, Buffer.from(JSON.stringify(msg)));
        console.log(" [x] Send %s", msg);
    });

    setTimeout(function() {
        connection.close();
        process.exit(0);
    }, 3000);
});

rabbitReceiveJsonTest.js


var amqp = require('amqplib/callback_api');

amqp.connect('amqp://admin:admin@localhost', function(error0, connection) {
      if (error0) {
            throw error0;
      }
    connection.createChannel(function(error1, channel) {
        if (error1) {
            throw error1;
        }

        var queue = 'testQueue';

        /*
        * queue가 없으면 만들어줌
        * durable : true -> queue 데이터를  rabbitmq가 재시작해도 가지고 있음(소비하기전까지)
        */
        channel.assertQueue(queue, {
            durable: true,
        });

        console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", queue);

        channel.prefetch(10);
        channel.consume(queue, function(msg) {
            console.log(" [x] Received %s", msg.content.toString());
	    var result = JSON.parse(msg.content.toString());
	    console.log(result.testVal1, result.testVal2, result.testVal3);
	    channel.ack(msg);
        }, {
            //noAck: true 이면 queue에서 데이터를 가져간다음 Ack를 바로 반환함으로 가져가자마자 queue에서 지워버림
            noAck: false
        });
    });
});

#rabbitMQ json 데이터 전송 #rabbitMq json #node JS rabbitMq Json
REPLY