DotNetCore.RabbitMQ
$ dotnet add package DotNetCore.RabbitMQpublic sealed record Connection(string HostName, int Port, string UserName, string Password);
public interface IQueue<T>
{
Task PublishAsync(T obj);
Task SubscribeAsync(Func<T, Task> action);
}
public abstract class Queue<T> : IQueue<T>
{
protected Queue(Connection connection) { }
public async Task PublishAsync(T obj) { }
public async Task SubscribeAsync(Func<T, Task> action) { }
}
public sealed record Product(string Name);
public interface IProductQueue : IQueue<Product> { }
public class ProductQueue : Queue<Product>, IProductQueue
{
public ProductQueue(Connection connection) : base(connection) { }
}
var product = new Product("Product");
IProductQueue productQueue = new ProductQueue(new Connection("localhost", 5672, "admin", "P4ssW0rd!"));
productQueue.PublishAsync(product).Wait();
IProductQueue productQueue = new ProductQueue(new Connection("localhost", 5672, "admin", "P4ssW0rd!"));
productQueue.SubscribeAsync(product => Handle(product)).Wait();