Отправить message из C# в Nest app с помощью RabbitMQ

Мне нужно передать message из C# в приложение Nest с использованием аргумента-паттерна для декоратора @MessagePattern.

@MessagePattern() - всё работает корректно,
@MessagePattern('message') - There is no matching event handler defined in the remote service. Event pattern: undefined

Код на C#:

public void SendMessage(string message)
{
    var factory = new ConnectionFactory()
    {
        HostName = "localhost",
        UserName = "guest",
        Password = "guest"
    };

    using IConnection connection = factory.CreateConnection();
    using IModel channel = connection.CreateModel();

    channel.QueueDeclare(
        queue: "queue",
        durable: false,
        exclusive: false,
        autoDelete: false,
        arguments: null
    );

    byte[] body = Encoding.UTF8.GetBytes(message);

    IBasicProperties properties = channel.CreateBasicProperties();
    properties.Headers = new Dictionary<string, object> { { "pattern", "message" } };

    channel.BasicPublish(
        exchange: string.Empty,
        routingKey: "queue",
        basicProperties: properties,
        body: body
    );
}

NestJS:

@MessagePattern('message')
async createMessage(@Ctx() context: RmqContext) {
  // если вызвать @MessagePattern без аргумента, то в консоли получим значение pattern из C#
  console.log('Pattern:', context.getMessage().properties.headers['pattern']);
  // ...мой код
}

Я пытался использовать IBasicProperties, передавать pattern и cmd, но это не решило мою проблему. Еще пытался так:

@MessagePattern({ cmd: 'message' })
@MessagePattern({ pattern: 'message' })

Ответы (1 шт):

Автор решения: Ivan

Покопавшись в исходниках NestJs, понял, что паттерн передается в строке сообщения:

"{\"pattern\": \"message-pattern\", \"data\": \"message-data\"}"
→ Ссылка