Отправить 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\"}"