今回はチュートリアル 6 RPC についてやっていきます。
まずは RPCのサーバ側です。引数で受けた文字列に日時をつけて返します。
rpc_server.js
#!/usr/bin/env node const amqp = require('amqplib'); const my = require('./my.js'); async function main() { const a = getArgs(); const conn = await amqp.connect(my.conf).catch(my.die); const ch = await conn.createChannel(); await ch.assertQueue(a.queue, { durable: false }); ch.prefetch(1); console.log('Waiting queue=%s', a.queue); await ch.consume(a.queue, req => { var msg = req.content.toString(); var res = `${msg}(${new Date()})`; console.log('Response: %s', res); ch.sendToQueue(req.properties.replyTo, Buffer.from(res), { correlationId: req.properties.correlationId } ); ch.ack(req); } ); }; main(); function getArgs() { if (process.argv.length < 3) { usage(); } return { queue: process.argv[2], }; } function usage() { const usage = `rpc_server.js QUEUE_NAME`; console.log(usage); process.exit(); }
await ch.consume(a.queue, req => { var msg = req.content.toString(); var res = `${msg}(${new Date()})`; console.log('Response: %s', res); ch.sendToQueue(req.properties.replyTo, Buffer.from(res), { correlationId: req.properties.correlationId } ); ch.ack(req); } );
req.properties.replyTo は、Caller 側に返すための Queue です。
correlationId は RPC のやり取り上で使う一意の ID です。Caller 側で作ります。
次に Caller 側です。
続きを読む