73 lines
1.8 KiB
TypeScript
73 lines
1.8 KiB
TypeScript
import { RabbitMQEventBus, RMQConnectionParams } from "sim-shared/infrastructure/RabbitMQEventBus.js"
|
|
import { Channel } from "amqp-connection-manager"
|
|
import { env } from "./env/env.js"
|
|
|
|
const rmqUser = env.RABBITMQ_USER
|
|
const rmqPass = env.RABBITMQ_PASSWORD
|
|
const rmqHost = env.RABBITMQ_HOST
|
|
const rmqPort = Number(env.RABBITMQ_PORT)
|
|
const rmqSecure = false
|
|
const rmqVhost = env.RABBITMQ_VHOST
|
|
|
|
export const rmqConnOptions = <RMQConnectionParams>{
|
|
username: rmqUser,
|
|
password: rmqPass,
|
|
vhost: rmqVhost,
|
|
hostname: rmqHost,
|
|
port: rmqPort,
|
|
secure: rmqSecure,
|
|
}
|
|
|
|
|
|
const BASE_ALAI_KEY = "sim.alai.#"
|
|
const QUEUES = {
|
|
MAIN: "sim.alai",
|
|
DLX: "sim.alai.dlx",
|
|
DELAY: "sim.alai.delayed",
|
|
}
|
|
|
|
const EXCHANGES = {
|
|
MAIN: "sim.exchange",
|
|
DLX: "sim.ex.alai.dlx",
|
|
DEL: "sim.ex.alai.delayed"
|
|
}
|
|
|
|
export const rabbitmqEventBus = new RabbitMQEventBus({
|
|
connectionParams: rmqConnOptions,
|
|
buildStructure: buildQueues,
|
|
maxRetry: 2,
|
|
delayedExchange: EXCHANGES.DEL,
|
|
dlxExchange: EXCHANGES.DLX
|
|
})
|
|
|
|
async function buildQueues(channel: Channel) {
|
|
|
|
const DELAY = 10 * 1000
|
|
|
|
await channel.assertExchange(EXCHANGES.DEL, "topic")
|
|
await channel.assertExchange(EXCHANGES.DLX, "topic")
|
|
await channel.assertExchange(EXCHANGES.MAIN, "topic")
|
|
|
|
await channel.assertQueue(QUEUES.MAIN)
|
|
await channel.assertQueue(QUEUES.DLX)
|
|
await channel.assertQueue(QUEUES.DELAY, {
|
|
durable: true,
|
|
arguments: {
|
|
'x-message-ttl': DELAY,
|
|
'x-dead-letter-exchange': EXCHANGES.MAIN,
|
|
}
|
|
})
|
|
|
|
// Cola dead-letter
|
|
await channel.bindQueue(QUEUES.DLX, EXCHANGES.DLX, BASE_ALAI_KEY)
|
|
// Cola delay
|
|
await channel.bindQueue(QUEUES.DELAY, EXCHANGES.DEL, BASE_ALAI_KEY)
|
|
// Cola nos -> main exchange
|
|
await channel.bindQueue(QUEUES.MAIN, EXCHANGES.MAIN, BASE_ALAI_KEY)
|
|
}
|
|
|
|
export async function startRMQClient() {
|
|
await rabbitmqEventBus.connect()
|
|
return rabbitmqEventBus
|
|
}
|