An Interest In:
Web News this Week
- March 21, 2024
- March 20, 2024
- March 19, 2024
- March 18, 2024
- March 17, 2024
- March 16, 2024
- March 15, 2024
NodeJS Azure Service Bus Windows Service
In this tutorial we will see how to create a little nodejs service that react to Azure Service Bus Queue events.
This could be useful in situation when you have an hybrid environment cloud + on premise and you want to orchestrate some kind of job that has to be done on premise.
This is not the only use case but its simple and common enough to be useful as a tutorial.
We will see how to create a Service Bus resource on Azure, how to configure a queue and how to create a small nodejs windows service that can consume the queue.
Setup
Ill assume you already have an Azure Subscription and a Resource Group.
If not you can use the Azure Free Tier.
Create a new resource in your Resource Group, in this case you have to search for Service Bus,
Fill the required fields. Ive choose the West Europe Location just because is closer to me and the Basic pricing tier.
If you plan to use topics instead of queues or both you have to choose at least the Standard pricing tier since the topic and subscription feature is not supported from the Basic plan.
In this case you can leave all the other options as default and continue with the resource creation.
Create a queue
Once you have your service bus up and running you can create your first queue.
Its very easy you just have to navigate to the Overview page of the newly created Service Bus resource and click on Create Queue.
There are not many options to fill in, I've used the name test-queue and left all the defaults.
Consume queue events
Now we can develop a little nodejs script installed as a Windows service that listen for Service Bus queue event end log in the OS Event Log,
We will use the official nodejs library for interacting with the service bus and the node-windows package to create the Windows service.
Project setup
Create a new folder service-bus-daemon on your filesystem.
Initialize a node project with the command
npm init -y
Install the dependencies
npm install @azure/service-bus [email protected].6
We will install the 1.0.0-beta.6 version of node-windows because at the time of writing the latest version 1.0.0-beta.7 has a bug that affect the service start.
Service development
Create 3 files in the root folder of your project.
- index.js is the main file where you can add your business logic
- .env contains all the environment variables
- install.js will install the script as a service on your machine
- uninstall.js will uninstall the previously created service
// file index.jsconst { ServiceBusClient } = require("@azure/service-bus");const EventLogger = require('node-windows').EventLogger;require('dotenv').config();const SERVICE_NAME = process.env.SERVICE_NAME;const QUEUE_NAME = process.env.QUEUE_NAME;const CONNECTION_STRING = process.env.CONNECTION_STRING;// log directly in the Windows Event Loglog = new EventLogger(SERVICE_NAME);const queueName = QUEUE_NAMEconst sbClient = new ServiceBusClient(CONNECTION_STRING);const receiver = sbClient.createReceiver(queueName);async function main(receiver) { const myMessageHandler = async (messageReceived) => { log.info(`Received message: ${messageReceived.body}`); }; // function to handle any errors const myErrorHandler = async (error) => { log.error(error); }; receiver.subscribe({ processMessage: myMessageHandler, processError: myErrorHandler });} async function closeAll(receiver, sbClient) { await receiver.close(); await sbClient.close(); process.exit(0);}main(receiver).catch((err) => { log.error(err); process.exit(1); });process.on('SIGTERM', () => { log.info('Process terminated SIGTERM'); closeAll(receiver, sbClient);});process.on('SIGINT', () => { log.info('Process terminated SIGINT'); closeAll(receiver, sbClient);});process.on('SIGKILL', () => { log.info('Process terminated SIGKILL'); closeAll(receiver, sbClient);});
// file install.jsrequire('dotenv').config();const SERVICE_NAME = process.env.SERVICE_NAME;var Service = require('node-windows').Service;// Create a new service objectvar svc = new Service({ name: SERVICE_NAME, description: 'React to service bus queue messages', script: require('path').join(__dirname,'index.js'),});// Listen for the "install" event, which indicates the// process is available as a service.svc.on('install',function(){ // start the process svc.start();});svc.install();
// file uninstall.jsrequire('dotenv').config();const SERVICE_NAME = process.env.SERVICE_NAME;var Service = require('node-windows').Service;// Create a new service objectvar svc = new Service({ name: SERVICE_NAME, script: require('path').join(__dirname,'index.js')});// Listen for the "uninstall" event so we know when it's done.svc.on('uninstall',function(){ console.log('Uninstall complete.'); console.log('The service exists: ',svc.exists);});// Uninstall the service.svc.uninstall();
Install and test the service
In order to install the service you have to run
node install.js
node-windows will create an .exe wrapper of your script and it will create the service for you.
You can test it by creating a message in the queue directly from the Azure Portal using the storing explorer as follow:
If you want to uninstall the service you just have to run
node uninstall.js
Conclusion
In this tutorial we've created a small script that can be useful as a starting point for creating a windows service with node js and Azure Service Bus.
Original Link: https://dev.to/pul/nodejs-azure-service-bus-windows-service-5262
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To