An open-source lightweight message bus library (RabbitMQ) that supports publish/subscribe and RPC.
nuget | stats |
---|---|
You can install via NuGet:
Install-Package DistributedMessage4RabbitMQ
# Getting Started
## Add Service Support
```csharp
services.AddDistributedMessage4RabbitMQ(configure =>
{
configure.HostName = "localhost";
configure.VirtualHost = "/";
configure.Port = 5672;
configure.UserName = "admin";
configure.Password = "admin";
},
Assembly.GetExecutingAssembly());
public class HelloMessage : DistributedEventBase
{
public string Message { get; set; }
}
or
[ExchangeDeclare("Hello")]
[QueueDeclare("Hello")]
[QueueBind("HelloMessage")]
public class HelloMessage : DistributedEventBase
{
public string Message { get; set; } = default!;
}
public class HelloMessageHandler : IDistributedEventHandler<HelloMessage>
{
public async Task HandleAsync(HelloMessage message, CancellationToken cancellationToken)
{
Console.WriteLine("Hello");
await Task.CompletedTask;
}
}
await messageBus.PublishAsync(new HelloMessage() { Message = "Hello" });
or
var hello = new HelloMessage()
{
Message = "Hello World"
};
hello.Metadata.AddMessageHeader("key1", "value");
messageBus.PublishAsync(hello);
public class WrappedData
{
public string Message { get; set; }
}
public class DistributedEventWrapperHandler : IDistributedEventHandler<DistributedEventWrapper<WrappedData>>
{
public async Task HandleAsync(DistributedEventWrapper<WrappedData> eventData, CancellationToken cancellationToken = default)
{
await Task.CompletedTask;
Console.WriteLine("DistributedEventWrapper");
}
}
await messageBus.PublishAsync(new WrappedData());
public class Ping : IRpcRequest<Pong>
{
public string SendBy { get; set; }
}
public class Pong
{
public string ReplyBy { get; set; }
}
public class PingHandler : IRpcRequestHandler<Ping, Pong>
{
public Task<Pong> HandleAsync(Ping message, CancellationToken cancellationToken = default)
{
Console.WriteLine("Ping");
return Task.FromResult(new Pong() { ReplyBy = "B" });
}
}
var pongMessage = messageBus.SendAsync(ping);
[QueueBind("HelloMessage", QueueName = "Hello")]
[DeadLetter(messageType: typeof(HelloMessageDeadLetter))]
public class HelloMessage : DistributedEventBase
{
public string Message { get; set; } = default!;
}
[QueueBind("HelloMessageDeadLetter", QueueName = "HelloDeadLetter", ExchangeName = "DeadLetter")]
public class HelloMessageDeadLetter : DistributedEventBase
{
}
MIT