Masstransit 是一个 .NET 免费开源的分布式应用框架git
新建控制台程序 mt-001,引入 Masstransit 包github
namespace mt_001 { class Program { static async Task Main(string[] args) { var bus = Bus.Factory.CreateUsingInMemory(sbc => { sbc.ReceiveEndpoint("test_queue", ep => { ep.Handler<Message>(context => Console.Out.WriteLineAsync($"Received: {context.Message.Text}")); }); }); await bus.StartAsync();// This is important ! await bus.Publish(new Message { Text = "Hi" }); Console.WriteLine("Please input your message with enter:"); string message = Console.ReadLine(); while (message != "EXIT") { await bus.Publish(new Message() {Text = message}); message = Console.ReadLine(); } await bus.StopAsync(); Console.WriteLine("Hello World!"); } } public class Message { public string Text { get; set; } } }
启动程序,收发消息并发
新建控制台程序 mt-002,引入 MassTransit.RabbitMQ 包框架
方法改成 CreateUsingRabbitMq,而且添加 rabbitmq hostasync
var bus = Bus.Factory.CreateUsingRabbitMq(sbc => { sbc.Host("rabbitmq://localhost"); sbc.ReceiveEndpoint("test_queue", ep => { ep.Handler<Message>(context => Console.Out.WriteLineAsync($"Received: {context.Message.Text}")); }); });
启动两个客户端,消息是轮询接收的分布式
MassTransit 使用 C# 强类型来定义,一个消息能够被定义为接口,一般咱们也称之为消息契约单元测试
消息分为 command 命令与 event 事件,分别对应 send 和 publish 方法测试
在不一样项目里面建立类来消费消息时确保命名空间一致,不然消费不到ui
命名空间:Company.Application.Contractsspa
namespace Company.Application.Contracts { using System; public interface UpdateCustomerAddress { Guid CommandId { get; } DateTime Timestamp { get; } string CustomerId { get; } string HouseNumber { get; } string Street { get; } string City { get; } string State { get; } string PostalCode { get; } } }
Command
Event
尽可能使用接口来定义消息类型,使用消息初始化器(有点困难)
使用类以及继承时须要特别注意:
https://github.com/MINGSON666/Personal-Learning-Library/tree/main/ArchitectTrainingCamp
本做品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
欢迎转载、使用、从新发布,但务必保留文章署名 郑子铭 (包含连接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的做品务必以相同的许可发布。
若有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。