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

@knockaway/sqsiphon

v1.2.0

Published

_sqsiphon_ provides a framework for writing [Amazon SQS][sqs] polling applications. It is designed to poll, and process messages, as quickly as possible. FIFO queues are supported.

Downloads

15

Readme

@knockaway/sqsiphon

sqsiphon provides a framework for writing Amazon SQS polling applications. It is designed to poll, and process messages, as quickly as possible. FIFO queues are supported.

Queue Processing

  1. sqsiphon polls for up to 10 messages (the SQS allowed maximum).
  2. The retrieved messages are inspected to determine if any are tagged as being members of a FIFO queue.
  3. Messages that are not tagged for a FIFO queue are placed into a general processing batch. Any FIFO tagged messages are added to a batch specifically for the tagged FIFO queue. For example, consider a poll event returns three messages: message A is untagged, message B is tagged for "foo", and message C is tagged for "bar". Message A will be put on the general processing batch and two new batches will be created: "foo" and "bar", each with one message added for processing.
  4. All available processing batches are processed: the general batch's messages are processed concurrently, and each FIFO batch is processed sequentially.
  5. Messages that generate an error during processing are left on the queue.

FIFO Errors: When a message on a FIFO queue cannot be processed successfully, the message, and any remaining messages in the batch, will be left on the queue. It is recommened that a corresponding dead letter queue be configured so that these messages will be moved there by SQS.

Example

const { SQS } = require('aws-sdk');
const sqs = new SQS({
  apiVersion: '2012-11-05',
  region: 'us-east-1'
});
const sqsiphonFactory = require('@knockaway/sqsiphon');
const app = sqsiphonFactory({
  sqs,
  queueUrl: 'url for the sqs queue',
  handler: messageHandler
});

function shutdown(signal) {
  app.stop();
}
['SIGTERM', 'SIGINT'].forEach(signal => process.on(signal, shutdown));

if ((require.main === module) === true) {
  app.start();
}

async function messageHandler(message) {
  // `message` is an SQS message as returned by the `aws-sdk`
  // ...
  // Do something with the message or `throw Error('failed')`
}

Factory Options

This module exports a factory function which accepts an options object with the following properties:

  • logger (optional): An object that follows the Log4j logger interface. The default is an instance of abstract-logging.
  • sqs (required): An instance of SQS from the aws-sdk.
  • queueUrl (required): A string URL pointing to the SQS instance to poll.
  • handler (required): A function to handle received messages. Must be an async function. The function will receive one parameter: message. The parameter is an instance of SQS Message. If the message cannot be processed for any reason, an instance of Error should be thrown. If no error is thrown, the message has been considered to be successfully processed.
  • tracer (optional): an OpenTracing compliant tracer instance.
  • receiveMessageParameters (optional): an object that conforms to the object described by sqs.receiveMessage. The default has: AttributeNames: ['All'], MaxNumberOfMessages: 10, MessageAttributeNames: ['All'], and VisibilityTimeout: 30. The QueueUrl is always overridden by the passed in queueUrl value.

App Instance

The factory returns an application instance. The application instance is an event emitter.

Instance Methods And Properties

  • isRunning (boolean): indicates if the application is polling for messages or not.
  • start(): initiates the application to start polling for messages.
  • stop(): initiates the application to stop polling for messages. Any messages currently being processed will be completed.

Instance Events

  • error: fired when an unexpected error occurs. Receives an Error object.
  • request-error: fired when a communication error occurs. Receives an Error object.
  • processing-error: fired when an error occurs while processing a message. Receives an object with error and message properties.
  • fifo-processing-aborted: fired when a FIFO batch stop processing due to an error. Receives an object with message and messages properties. This event will fire subsequent to a processing-error event.
  • received-messages: fired when a new batch of messages has been received. Receives an array of SQS message objects.
  • handled-message: fired when a message has been successfully handled. Receives an SQS message object.