generated from ricardo/MVCLogin
88 lines
3.3 KiB
C#
88 lines
3.3 KiB
C#
using RabbitMQ.Client;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Text.Json;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace SumaTube.Infra.VideoSumarizer.Videos
|
|
{
|
|
public class VideoSumarizerService
|
|
{
|
|
private static string _hostName = Environment.GetEnvironmentVariable("RABBITMQ_HOST") ?? "localhost";
|
|
private static string _userName = Environment.GetEnvironmentVariable("RABBITMQ_USER") ?? "guest";
|
|
private static string _password = Environment.GetEnvironmentVariable("RABBITMQ_PASSWORD") ?? "guest";
|
|
private static string _queueName = "video-processing-queue";
|
|
|
|
public async Task RequestVideoSummarization(string sessionId, string url, string language)
|
|
{
|
|
Console.WriteLine("### Video Processor Publisher ###");
|
|
Console.WriteLine($"Conectando ao RabbitMQ em {_hostName}...");
|
|
|
|
try
|
|
{
|
|
var factory = new ConnectionFactory()
|
|
{
|
|
HostName = _hostName,
|
|
UserName = _userName,
|
|
Password = _password
|
|
};
|
|
|
|
using (var connection = await factory.CreateConnectionAsync())
|
|
using (var channel = await connection.CreateChannelAsync())
|
|
{
|
|
await channel.QueueDeclareAsync(
|
|
queue: _queueName,
|
|
durable: true,
|
|
exclusive: false,
|
|
autoDelete: false,
|
|
arguments: null);
|
|
|
|
var properties = new BasicProperties
|
|
{
|
|
Persistent = true
|
|
};
|
|
|
|
Console.WriteLine("Conexão estabelecida com RabbitMQ");
|
|
Console.WriteLine("Pressione 'Ctrl+C' para sair");
|
|
|
|
// Loop para publicar mensagens
|
|
while (true)
|
|
{
|
|
if (string.IsNullOrWhiteSpace(language))
|
|
language = "pt";
|
|
|
|
// Criar objeto de mensagem
|
|
var message = new VideoProcessingMessageDocument(
|
|
sessionId,
|
|
url,
|
|
language);
|
|
|
|
// Serializar para JSON
|
|
var messageJson = JsonSerializer.Serialize(message);
|
|
var body = Encoding.UTF8.GetBytes(messageJson);
|
|
|
|
// Publicar mensagem
|
|
await channel.BasicPublishAsync(exchange: string.Empty,
|
|
routingKey: _queueName,
|
|
mandatory: true,
|
|
basicProperties: properties,
|
|
body: body);
|
|
|
|
Console.WriteLine($"[x] Mensagem enviada: {messageJson}");
|
|
}
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Console.WriteLine($"Erro: {ex.Message}");
|
|
Console.WriteLine(ex.StackTrace);
|
|
}
|
|
|
|
Console.WriteLine("Publicador finalizado.");
|
|
Console.ReadLine();
|
|
}
|
|
}
|
|
}
|