使用新的connectioninit时,带有@golevelup/nestjs-rabbitmq的NesJS RabbitMQ没有连接

eaf3rand  于 2022-11-23  发布在  RabbitMQ
关注(0)|答案(2)|浏览(141)

使用@golevelup/nestjs-rabbitmq时,我尝试连接管理器不等待连接。根据自述文件,它可以处理重新连接并等待连接,而不会使应用程序崩溃。但是,当我按照说明使用connectionInitOptions并将wait设置为false时,我得到了连接错误。当我不使用它时(默认行为设置waittrue),它连接到RabbitMQ服务器。下面是在NestJS模块中导入RabbitMQModule的示例。
这将工作并连接到RabbitMQ服务器

RabbitMQModule.forRoot(RabbitMQModule, {
      exchanges: [{ type: 'topic', name: 'main' }],
      uri: 'amqp://guest:guest@localhost:5672',
    }

这不起作用,无法连接

RabbitMQModule.forRoot(RabbitMQModule, {
      exchanges: [{ type: 'topic', name: 'main' }],
      uri: 'amqp://guest:guest@localhost:5672',
      connectionInitOptions: {
        wait: false,
      },

使用第二个选项时,我得到以下错误:

Error: AMQP connection is not available
    at AmqpConnection.publish (/home/xxx/node_modules/@golevelup/nestjs-rabbitmq/src/amqp/connection.ts:424:13)
    at BootstrapService.onApplicationBootstrap (/home/xxx/src/bootstrap/bootstrap.service.ts:20:25)
    at MapIterator.iteratee (/home/xxx/node_modules/@nestjs/core/hooks/on-app-bootstrap.hook.js:22:43)
    at MapIterator.next (/home/xxx/node_modules/iterare/src/map.ts:9:39)
    at IteratorWithOperators.next (/home/xxx/node_modules/iterare/src/iterate.ts:19:28)
    at Function.from (<anonymous>)
    at IteratorWithOperators.toArray (/home/xxx/node_modules/iterare/src/iterate.ts:227:22)
    at callOperator (/home/xxx/node_modules/@nestjs/core/hooks/on-app-bootstrap.hook.js:23:10)
    at callModuleBootstrapHook (/home/xxx/node_modules/@nestjs/core/hooks/on-app-bootstrap.hook.js:43:23)
    at NestApplication.callBootstrapHook (/home/xxx/node_modules/@nestjs/core/nest-application-context.js:199:55)
    at NestApplication.init (/home/xxx/node_modules/@nestjs/core/nest-application.js:98:9)
    at NestApplication.listen (/home/xxx/node_modules/@nestjs/core/nest-application.js:155:33)
    at bootstrap (/home/xxx/src/main.ts:12:3)

最后一行(main. ts:12:3)是app.listen(3000)语句。还有其他选项可以用connectionInitOptions来设置(rejecttimeout),我已经尝试了这些组合,但仍然没有连接。
RabbitMQ运行在Linux上的一个Docker容器中,但这应该没有问题。我在NestJS Discord上发布了同样的问题,但没有得到回复,所以希望SO上的人有一个想法。
知道是什么原因吗?

xsuvu9jc

xsuvu9jc1#

发现问题,我正在使用一个onApplicationBootstrap方法中的连接,然后连接显然还不存在。

qncylg1j

qncylg1j2#

您可以“onApplicationBootstrap”异步等待连接:或位于:

async onModuleInit() {
     await this.amqpConnection.managedChannel.waitForConnect(async () => {
     await this.assertQueueAndBindToExchange(
      transferRequestQueueName,
      transferRequestExchangeName,
      createdRoutingKey
    );

相关问题