首页 > 解决方案 > rabbitmq 消费函数/channel.ack

问题描述

我有以下功能可以使用打字稿在我的 rabbitmq 上使用:

  async consume(
    queue: string,
    callback: (message: ConsumeMessage | null) => void,
  ) {
    return this.channel.consume(queue, message => {
      callback(message);
      this.channel.ack(message);
    });
  }

这个频道。consume 接收队列,ConsumeMessage 类型的消息但是this.channel.ack 需要从lib amqlib 接收一个MESSAGE 类型作为参数

但由于我的消息是使用消息,我收到以下错误:

'ConsumeMessage | 类型的参数 null '不可分配给'Message'类型的参数。类型“null”不可分配给类型“消息”.ts (2345)

当我尝试使用 .ack

如果出现错误,我也对如何实施治疗有疑问

标签: typescriptrabbitmq

解决方案


您收到该错误是因为您无法在需要ConsumeMessage | nulla 的地方使用(我认为是)您的自定义类型amqplib.Message | null。TypeScript 编译器只能保证一个对象匹配Message将被传递到回调中,它不能保证你的额外属性会在那里。

如果出现错误,我也对如何实施治疗有疑问

您可能希望添加一个err参数作为回调的第一个参数,并使用自定义错误 if messageis调用它null,这在消费者被取消时发生。我假设您正在使用amqplib/callback_api.


推荐阅读