Я пытаюсь создать asyncEventBasicConsumer в F #.
Для этого мне нужно использовать add_Received
со следующей подписью
member add_Received:
value: AsyncEventHandler<BasicDeliverEventArgs>
-> unit
Но я не знаю, как создать AsyncEventHandler из
async {}
Это конкретная функция
let subscribe : Subscribe =
fun factory queueName handleMessage ->
let connection = factory.CreateConnection()
let model = connection.CreateModel()
let consumer = AsyncEventingBasicConsumer(model)
consumer.add_Received //?? how create a AsyncEventHandler
model.BasicConsume(queueName, false, consumer) |> ignore
(fun () ->
model.Close()
connection.Close())
А вот код c #
static void Main(string[] args)
{
var factory = new ConnectionFactory() { DispatchConsumersAsync = true };
const string queueName = "myqueue";
using (var connection = factory.CreateConnection())
using (var channel = connection.CreateModel())
{
channel.QueueDeclare(queueName, true, false, false, null);
// consumer
var consumer = new AsyncEventingBasicConsumer(channel);
consumer.Received += Consumer_Received;
channel.BasicConsume(queueName, true, consumer);
// publisher
var props = channel.CreateBasicProperties();
int i = 0;
while (true)
{
var messageBody = Encoding.UTF8.GetBytes($"Message {++i}");
channel.BasicPublish("", queueName, props, messageBody);
Thread.Sleep(50);
}
}
}
private static async Task Consumer_Received(object sender, BasicDeliverEventArgs @event)
{
var message = Encoding.UTF8.GetString(@event.Body);
Console.WriteLine($"Begin processing {message}");
await Task.Delay(250);
Console.WriteLine($"End processing {message}");
}