@occupop/lib-queue
TypeScript icon, indicating that this package has built-in type declarations

1.0.3 • Public • Published

Package @occupop/lib-queue

This package is intended to be used with @occupop/lib-container providing queue consumer/publisher through AWS SQS/SNS clients.

This implementation refers to:

NPM registry token required!

Install

# Yarn
yarn add @occupop/lib-queue

# NPM
npm install @occupop/lib-queue

# Bun
bun add @occupop/lib-queue

Env Setup

ENV variables required

AWS_ENDPOINT=http://localstack:4566
AWS_REGION=eu-west-1
AWS_ACCESS_KEY_ID=...
AWS_SECRET_ACCESS_KEY=...

AWS_SQS_QUEUE_URL=http://localstack:4566/000000000000/queue-name-here
AWS_SNS_TOPIC_ARN=arn:aws:sns:eu-west-1:000000000000:topic-name-here

Register

import { makeQueueService, makeSqsClient, makeSnsClient } from '@occupop/lib-queue'
import { eventContainer } from '.event-container'
//... all other imports omited... 

export const container = createTypedContainer({
    // ...
    // queue service:
    queueService: { asFunction: makeQueueService, singleton: true },
    // optional:
    eventContainer: { asValue: eventContainer },
    sqsClient: { asFunction: makeSqsClient, singleton: true },
    snsClient: { asFunction: makeSnsClient, singleton: true },
    // ...
})
  • eventContainer can be provided direct on consumer call.
  • sqsClient/snsClient is to be registered only if you need some kind of custom implementation.

Usage (worker)

// worker.ts
import { container } from '.container'
import { eventContainer } from '.event-container'

const { mongoClient, queueService } = container.cradle

await mongoClient.connect()
console.log('Mongo connected')

// providing eventContainer...
await queueService.consume({ eventContainer })
console.log('Queue consuming')

// ... or without, if you register on main container!
// await queueService.consume()
// console.log('Queue consuming')

Usage (eventContainer simple implementation)

// event-container.ts
import type { QueueEventContainer, QueueEvent } from '@occupop/lib-queue'

export const eventContainer = {
    Event_name_here: (event: QueueEvent) => {
        // ... handler implementation
    },
    Another_event_there: (event: QueueEvent) => {
        // ... handler implementation
    }
}

Usage (eventContainer with dependency injection, recomended)

// event-container.ts
import { container } from '.container'
import type { QueueEventContainer, QueueEvent } from '@occupop/lib-queue'
import { createTypedContainerScope } from '@occupop/lib-container'

export const eventContainer = createTypedContainerScope(container, {
    Event_name_here: { asFunction: makeEventNameHandler },
    Another_event_there: { asFunction: makeAnotherEventHandler },
    Another_event_alike: { asFunction: makeAnotherEventHandler },
}).cradle

Sample event handler

// event-name-handler.ts
import type { Deps } from '.container'
import { QueueEvent } from "@occupop/lib-queue";

interface CustomEventName extends QueueEvent {
    customAttribute: string
    randomEntity: {
        uuid: string
        someOtherAttribute: string
        maybeAnOptionalOne?: boolean
    }
}

export const makeEventNameHandler = ({ fooService, barService }: Deps) => {
    (event: CustomEventName) => {
        // implementation that depends on fooService and barService...
    }
}

Readme

Keywords

none

Package Sidebar

Install

npm i @occupop/lib-queue

Weekly Downloads

232

Version

1.0.3

License

none

Unpacked Size

9.42 kB

Total Files

4

Last publish

Collaborators

  • gera_occupop
  • dougoccupop
  • pauloccupop
  • lcidral
  • leonardoreiners
  • paulooccupop
  • matheus-occupop
  • kaueoccupop