Hello World for nodejs stream client (#403)
* add: simple publish/receive examples for the nodejs stream client
This commit is contained in:
parent
3029ca6bb9
commit
bfe6dd09fd
1
javascript-nodejs-stream/.gitignore
vendored
Normal file
1
javascript-nodejs-stream/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/node_modules
|
18
javascript-nodejs-stream/README.md
Normal file
18
javascript-nodejs-stream/README.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Node.js code for RabbitMQ stream tutorials
|
||||||
|
|
||||||
|
Here you can find JavaScript (Node) code examples from [RabbitMQ tutorials](https://www.rabbitmq.com/getstarted.html) related to the [Stream plugin](https://www.rabbitmq.com/docs/stream).
|
||||||
|
|
||||||
|
To successfully use the examples you will need a running RabbitMQ server.
|
||||||
|
|
||||||
|
## Requirements
|
||||||
|
|
||||||
|
Apart from [Node.js](https://nodejs.org/en/download/), these examples use the [`rabbitmq-stream-js-client`](https://github.com/coders51/rabbitmq-stream-js-client) client library.
|
||||||
|
|
||||||
|
## Code
|
||||||
|
|
||||||
|
Code examples are executed via `npm`:
|
||||||
|
|
||||||
|
npm run publish
|
||||||
|
npm run receive
|
||||||
|
|
||||||
|
To learn more, see [`coders51/rabbitmq-stream-js-client`](https://github.com/coders51/rabbitmq-stream-js-client).
|
84
javascript-nodejs-stream/package-lock.json
generated
Normal file
84
javascript-nodejs-stream/package-lock.json
generated
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
{
|
||||||
|
"name": "rabbitmq-stream-node-tutorial",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"lockfileVersion": 2,
|
||||||
|
"requires": true,
|
||||||
|
"packages": {
|
||||||
|
"": {
|
||||||
|
"name": "rabbitmq-stream-node-tutorial",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"dependencies": {
|
||||||
|
"rabbitmq-stream-js-client": "^0.3.1"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/lru-cache": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
|
||||||
|
"dependencies": {
|
||||||
|
"yallist": "^4.0.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/rabbitmq-stream-js-client": {
|
||||||
|
"version": "0.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/rabbitmq-stream-js-client/-/rabbitmq-stream-js-client-0.3.1.tgz",
|
||||||
|
"integrity": "sha512-x2xfH+otHquRNPzzClWMuMa2njvqgbrG0YRY/AE51aL0PFCXlv0NZ9OXR7Y73X63+9kUzoYLDWBX4bw1rTfX8Q==",
|
||||||
|
"dependencies": {
|
||||||
|
"semver": "^7.5.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/semver": {
|
||||||
|
"version": "7.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
|
||||||
|
"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
|
||||||
|
"dependencies": {
|
||||||
|
"lru-cache": "^6.0.0"
|
||||||
|
},
|
||||||
|
"bin": {
|
||||||
|
"semver": "bin/semver.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=10"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/yallist": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"lru-cache": {
|
||||||
|
"version": "6.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
|
||||||
|
"integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
|
||||||
|
"requires": {
|
||||||
|
"yallist": "^4.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"rabbitmq-stream-js-client": {
|
||||||
|
"version": "0.3.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/rabbitmq-stream-js-client/-/rabbitmq-stream-js-client-0.3.1.tgz",
|
||||||
|
"integrity": "sha512-x2xfH+otHquRNPzzClWMuMa2njvqgbrG0YRY/AE51aL0PFCXlv0NZ9OXR7Y73X63+9kUzoYLDWBX4bw1rTfX8Q==",
|
||||||
|
"requires": {
|
||||||
|
"semver": "^7.5.4"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"semver": {
|
||||||
|
"version": "7.6.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
|
||||||
|
"integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
|
||||||
|
"requires": {
|
||||||
|
"lru-cache": "^6.0.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"yallist": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
12
javascript-nodejs-stream/package.json
Normal file
12
javascript-nodejs-stream/package.json
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"name": "rabbitmq-stream-node-tutorial",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Tutorial for the nodejs RabbitMQ stream client",
|
||||||
|
"scripts": {
|
||||||
|
"send": "node send.js",
|
||||||
|
"receive": "node receive.js"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"rabbitmq-stream-js-client": "^0.3.1"
|
||||||
|
}
|
||||||
|
}
|
33
javascript-nodejs-stream/receive.js
Normal file
33
javascript-nodejs-stream/receive.js
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
const rabbit = require("rabbitmq-stream-js-client")
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
const streamName = "hello-nodejs-stream"
|
||||||
|
|
||||||
|
console.log("Connecting...");
|
||||||
|
const client = await rabbit.connect({
|
||||||
|
hostname: "localhost",
|
||||||
|
port: 5552,
|
||||||
|
username: "guest",
|
||||||
|
password: "guest",
|
||||||
|
vhost: "/",
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log("Making sure the stream exists...");
|
||||||
|
const streamSizeRetention = 5 * 1e9
|
||||||
|
await client.createStream({ stream: streamName, arguments: { "max-length-bytes": streamSizeRetention } });
|
||||||
|
|
||||||
|
console.log("Declaring the consumer with offset...");
|
||||||
|
await client.declareConsumer({ stream: streamName, offset: rabbit.Offset.first() }, (message) => {
|
||||||
|
console.log(`Received message ${message.content.toString()}`)
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
main()
|
||||||
|
.then(async () => {
|
||||||
|
await new Promise(function () { })
|
||||||
|
})
|
||||||
|
.catch((res) => {
|
||||||
|
console.log("Error while receiving message!", res)
|
||||||
|
process.exit(-1)
|
||||||
|
})
|
34
javascript-nodejs-stream/send.js
Normal file
34
javascript-nodejs-stream/send.js
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
const rabbit = require("rabbitmq-stream-js-client");
|
||||||
|
|
||||||
|
async function main() {
|
||||||
|
const streamName = "hello-nodejs-stream";
|
||||||
|
|
||||||
|
console.log("Connecting...");
|
||||||
|
const client = await rabbit.connect({
|
||||||
|
vhost: "/",
|
||||||
|
port: 5552,
|
||||||
|
hostname: "localhost",
|
||||||
|
username: "guest",
|
||||||
|
password: "guest",
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log("Making sure the stream exists...");
|
||||||
|
const streamSizeRetention = 5 * 1e9
|
||||||
|
await client.createStream({ stream: streamName, arguments: { "max-length-bytes": streamSizeRetention } });
|
||||||
|
|
||||||
|
console.log("Creating the publisher...");
|
||||||
|
const publisher = await client.declarePublisher({ stream: streamName });
|
||||||
|
|
||||||
|
console.log("Sending a message...");
|
||||||
|
await publisher.send(Buffer.from("Test message"));
|
||||||
|
|
||||||
|
console.log("Closing the connection...");
|
||||||
|
await client.close();
|
||||||
|
}
|
||||||
|
|
||||||
|
main()
|
||||||
|
.then(() => console.log("done!"))
|
||||||
|
.catch((res) => {
|
||||||
|
console.log("Error in publishing message!", res);
|
||||||
|
process.exit(-1);
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user