1.0.33 • Published 4 years ago

amqp-decorator v1.0.33

Weekly downloads
3
License
MIT
Repository
github
Last release
4 years ago

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
})
1.0.29

4 years ago

1.0.28

4 years ago

1.0.27

4 years ago

1.0.33

4 years ago

1.0.32

4 years ago

1.0.31

4 years ago

1.0.30

4 years ago

1.0.26

4 years ago

1.0.25

4 years ago

1.0.24

4 years ago

1.0.23

4 years ago

1.0.22

4 years ago

1.0.21

4 years ago

1.0.20

4 years ago

1.0.19

4 years ago

1.0.18

4 years ago

1.0.16

4 years ago

1.0.15

4 years ago

1.0.14

4 years ago

1.0.13

4 years ago

1.0.12

4 years ago

1.0.11

4 years ago

1.0.10

4 years ago

1.0.9

4 years ago

1.0.8

4 years ago

1.0.7

4 years ago

1.0.6

4 years ago

1.0.5

4 years ago

1.0.4

4 years ago

1.0.3

4 years ago

1.0.2

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago