Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

amqp-decorator

Package Overview
Dependencies
Maintainers
1
Versions
33
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

amqp-decorator

amqp-decorator help you to build microservice with typescript level, you can call a service from anywhere with amqp procol. Support request response round round robin, direct request, publish subscrible # 1. Install ```bash npm i amqp-decorator ``` o

latest
Source
npmnpm
Version
1.0.33
Version published
Maintainers
1
Created
Source

AMQP DECORATOR FOR NODEJS TYPESCRIPT

amqp-decorator help you to build microservice with typescript level, you can call a service from anywhere with amqp procol. Support request response round round robin, direct request, publish subscrible

1. Install

npm i amqp-decorator

or with yarn

yarn add amqp-decorator

2. Usage

To make sure AMQP inited before programs run, make sure you inited AMQP at first (in async funcrtion)

import {AMQP} from 'amqp-decorator'

setImmediate(async() => {
  await AMQP.init(amqp_url) // amqp_url = 'amqp://localhost:6789' default
  // ... Other inited here
})

- Request response pattern

For example, we define 01 service, 01 consumer and 01 worker

// ServiceX.ts
import { AmqpService, AmqpResponder } from 'amqp-decorator'

@AmqpService()
class ServiceX{

    @AmqpResponder()
    async some_method(){
        return 'This is response from remote service'
    }
}
// responder.ts
import {AMQP} from 'amqp-decorator'
import {ServiceX} from './ServiceX'

setImmediate(async() => {
    await AMQP.init()
    new ServiceX()
})
// requester.ts
import { AMQP, AmqpRemoteService } from 'amqp-decorator'
import { ServiceX } from './ServiceX'

setImmediate(async() => {
   await AMQP.init()
   const service_x = await AmqpRemoteService<ServiceX>(ServiceX)
   console.log(await service_x.some_method()) // =>  This is response from remote service
})

you can use addtional options

@AmqpService()
class X{
   
    @AmqpResponder({
        limit: number // Max concurrent call function in same time
        active_when: (x: X) => Promise<boolean> // Consumer will listening until condition return true
        id: string | (x: X) => Promise<string> // Function return id of this consumer, to use direct request
        process_old_requests: boolean // Process requests before consumer start?
   })
   
   ...
}

*** Direct request

When you have many responders in system, you can set options to define uniqueue id for this responder. Then in requester, you can use .to(id: string) method to send request direct to extract responder you want

*** Error catching

If you throw an ERROR from responder, it will result an Error in resquester

*** Use with nestjs

You can import a class as remote service by use "AmqpRemoteServiceProvider" Instead

import { AmqpRemoteServiceProvider } from 'amqp-decorator'

@Module({
providers: [
        RemoteSerivce
]
})
export class WorkerComposerAppModule { }

just change to

import { AmqpRemoteServiceProvider } from 'amqp-decorator'

@Module({
providers: [
        AmqpRemoteServiceProvider(RemoteSerivce), // wrapped by AmqpRemoteServiceProvider
    ]
})
export class WorkerComposerAppModule { }

Now you can run this service from remote server to current server

- Event publish subscribe

To use event publish - subscrible, you must define events

// some-event.ts
import { createAmqpEvent } from 'amqp-decorator'
export const some_event = await createAmqpEvent<{x: string}>('some_event')
  // publisher.ts
import { AMQP } from 'amqp-decorator'
import { some_event } from './some_event'
    
setImmediate(async() => {
   await AMQP.init()
   await some_event.publish({x: 'vvvv'})
})
  // subscriber.ts
import { AMQP } from 'amqp-decorator'
import { some_event } from './some_event'

@AmqpService()
class X{
    
    @some_event.subscribe()
    async event_process(data: {x: string}){
        console.log(data) // {x: 'vvv'}
    }
}
    
setImmediate(async() => {
   await AMQP.init()
   new X() // You must instance class to listen events
})

FAQs

Package last updated on 15 May 2020

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts