可以用于.NET
和Unity
上面的高性能的内存/分布式消息传递管道。适用于发布/订阅模式、CQRS的中介模式、Prism中的EventAggregator、IPC(进程间通信)-RPC等。
支持:
MessagePipe
比标准的 C# event更快,是Prism的EventAggregator的78倍。下面是官方给出的测试截图
每次使用publish
分配的内存更少
还提供了Roslyn分析器以防止订阅泄露。
本库采用MIT
协议
项目名称分别为:MessagePipePublishApp
和MessagePipeSubscribeApp
,Publish项目用于发布消息,Subscribe项目用于接收消息。项目采用Prism框架进行搭建。通过重载的CreateContainerExtension
方法中进行依赖注入。
两个项目对MessagePipe
功能注入代码如下:
Publish项目代码:
var services = new ServiceCollection();
services
.AddMessagePipe()
.AddUdpInterprocess(
"127.0.0.1",
3215,
options =>
{
options.InstanceLifetime = InstanceLifetime.Singleton;
}
);
Subscribe项目代码:
var services = new ServiceCollection();
services
.AddMessagePipe()
.AddUdpInterprocess(
"127.0.0.1",
3215,
options =>
{
options.InstanceLifetime = InstanceLifetime.Singleton;
}
);
两个项目通过构造函数注入方式注入IDistributedPublisher
接口。
Publish项目,通过一个按钮的命令实现发送消息的功能:实现代码如下:
[RelayCommand]
private async Task PublishAsync()
{
await _distributedPublisher.PublishAsync(
"abc",
$"Message:{DateTime.Now:yyyy-MM-dd HH:mm:ss.fff}"
);
}
按钮点击一次,发送一次消息。
Subscribe项目中在窗口的Loaded方法中进行实现对订阅消息的接收,并将消息添加到列表中进行展示。
[RelayCommand]
private async Task LoadedAsync()
{
await _distributedSubscriber.SubscribeAsync(
"abc",
message =>
{
Application.Current.Dispatcher.InvokeAsync(() =>
{
Messages.Add(message);
});
}
);
}