npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

systemic-azure-bus

v3.4.2

Published

A systemic component for azure bus

Downloads

242

Readme

CI CD

systemic-azure-bus

Systemic Azure Bus is a systemic component for the Azure Service Bus SDK. Its goal is to help you deal with azure bus topics and queues subscriptions and publications.

This library:

  • enforces the client to use a particular, sensible configuration
  • provides safe defaults for configuration
  • Exposes an easy interface for publication/subscription
  • Solves error handling
  • Allows clients to easily retry, retry with exponential backoff or dead letter a failed message
  • Opens/closes the connections

Configuration

A typical, simple configuration looks like this:

{
	connection: {
		connectionString: process.env.AZURE_SERVICEBUS_CONNECTION_STRING,
	},
	subscriptions: {
		topicSubscriptionName: {
			topic: 'myTopic',
			subscription: 'myTopic.action'
		},
	},
	publications: {
		topicPublicationName: {
			topic: 'myDestinationTopic',
			contentType: 'application/json', // optional - default is json
		},
	},
}

Systemic API

const initBus = require('systemic-azure-bus');
const { start, stop } = initBus();
...
const api = await start({ config }); // configuration similar to the one above

Topics API

Publish

const publicationId = 'topicPublicationName'; // declared in config
const publishInMyPublication = api.publish(publicationId);
await publishInMyPublication({ foo: 'bar' });

Subscribe

We provide a streaming API to subscribe to a topic and process messages flowing in.

const subscriptionId = 'topicSubscriptionName'; // declared in config
const subscribe = api.subscribe(console.error); // how to handle error
const handler = ({ body, userProperties }) => {
 // do something with message...
};
subscribe(subscriptionId, handler);

Get Subscription rules

In the case we want to retrieve the rules applied to a subscription, we can use this.

let subscriptionRules = await bus.getSubscriptionRules('topicSubscriptionName');

Peek DLQ

When a message goes to DLQ (Dead Letter Queue) we could peek those messages with this operation.

const subscriptionId = 'topicSubscriptionName'; // declared in config
const deadMessage = await api.peekDlq(subscriptionId); // retrieves only one

Process DLQ

Sometimes we need to process messages in DLQ, i.e. to purge it or to republish and reprocess them. We provide a streaming API to process them.

const handler = ({ body, userProperties }) => {
 // do something with message...
};
const subscriptionId = 'topicSubscriptionName'; // declared in config
api.processDlq(subscriptionId, handler);

Error handling