Изучаю брокер rabbitmq, используя библиотеку rascal и nestjs.
По дефолту rabbit использует type topic, хотел изменить значение.
В nestjs создал конфиг, взятый с сайта
cloudamqp , только изменены значения, библиотека в nestjs
@types/rascal.
файл RascalConfig, из-за которого получаю ошибку{
"vhosts": {
"v2": {
"connection": {
"slashes": true,
"protocol": "amqp",
"hostname": "localhost",
"user": "smoke86",
"password": "smoke86",
"port": 5672,
"vhost": "v2",
"options": {
"heartbeat": 5
},
"socketOptions": {
"timeout": 10000
}
},
"exchanges": {
"user_ex": {
"type": "direct"
}
},
"queues": ["rabbit_q"],
"bindings": {
"v2h": {
"source": "user_ex",
"destination": "rabbit_q",
"destinationType": "queue",
"bindingKey": "uKey"
}
},
"publications": {
"user_pub": {
"vhost": "v2",
"exchange": "user_ex",
"routingKey": "uKey"
}
},
"subscriptions": {
"demo_sub": {
"queue": "rabbit_q",
"prefetch": 1
}
}
}
}
}
RascalProvider.ts
import { Injectable } from '@nestjs/common';
import { BrokerAsPromised } from 'rascal';
import RascalConfig from '../configs/rascal.config.json'
@Injectable()
export class RascalProvider {
private rascal = BrokerAsPromised;
async connectRascal(): Promise<BrokerAsPromised> {
return (await this.rascal.create(RascalConfig)) // Подчеркивает RascalConfog, ошибка тут
.on('error', console.error);
}
}
В другом микросервисе я не использую nestjs, там использую rascal и express и тот же конфиг раскаля, и там все прекрасно работает, не какой ошибки я не получаю. Предполагаю что проблема в TypeScript, но как ее исправить, так и не смог найти решение
Код ошибкиsrc/connect/rascal.provider.ts:10:42 - error TS2345: Argument of type '{ vhosts: { v2: { connection: { slashes: boolean; protocol: string; hostname: string; user: string; password: string; port: number; vhost: string; options: { heartbeat: number; }; socketOptions: { timeout: number; }; }; ... 4 more ...; subscriptions: { ...; }; }; }; }' is not assignable to parameter of type 'BrokerConfig'.
Types of property 'vhosts' are incompatible.
Type '{ v2: { connection: { slashes: boolean; protocol: string; hostname: string; user: string; password: string; port: number; vhost: string; options: { heartbeat: number; }; socketOptions: { timeout: number; }; }; ... 4 more ...; subscriptions: { ...; }; }; }' is not assignable to type '{ [key: string]: VhostConfig; }'.
Property '"v2"' is incompatible with index signature.
Type '{ connection: { slashes: boolean; protocol: string; hostname: string; user: string; password: string; port: number; vhost: string; options: { heartbeat: number; }; socketOptions: { timeout: number; }; }; ... 4 more ...; subscriptions: { ...; }; }' is not assignable to type 'VhostConfig'.
Types of property 'exchanges' are incompatible.
Type '{ user_ex: { type: string; }; }' is not assignable to type 'string[] | { [key: string]: ExchangeConfig; }'.
Type '{ user_ex: { type: string; }; }' is not assignable to type '{ [key: string]: ExchangeConfig; }'.
Property '"user_ex"' is incompatible with index signature.
Type '{ type: string; }' is not assignable to type 'ExchangeConfig'.
Types of property 'type' are incompatible.
Type 'string' is not assignable to type '"direct" | "fanout" | "headers" | "topic"'.
10 return (await this.rascal.create(RascalConfig))
И еще заметил если изменить
"exchanges и bindings" на
"exchanges": ["user_ex"],
"bindings": ["user_ex[uKey] -> rabbit_q"]
то ошибки не получаю