轻型服务巴士:MassTransit

轻型服务巴士:MassTransit

南非朋友,

https://www.maketecheasier.com/lightweight-browsers-for-windows/

又是今天 在微服务项目中 我使用的工具 轨道交通 我们会谈到。它是一个开源库,当我写这篇文章时,它的第 8 版已经发布。它在.Net 世界中非常流行。他虽然多才多艺,但今天我们要讨论的是“服务巴士”部分,这是它最基本的特点。虽然有多种方法可以做到这一点,但 MassTransit 让我们很容易做到这一点。如果我们准备好了,让我们开始吧。

尽管 MassTransit 将自己描述为“轻量级服务总线”,但它实际上是一个非常强大的工具。当我第一次使用它时,它有 4 种不同的集成。现在,当我阅读这篇文章时,我看到他们添加了 2 个新的集成。这些集成如下。

- 在记忆中

- 兔MQ

- Azure 服务总线

- 亚马逊 SQS

- gRPC

- ActiveMQ

如你所知 兔MQ 它是一个开源消息队列系统(消息代理),被业界公认为基石,并被许多软件开发人员使用。由于我们的主题不是 RabbitMQ,所以我们在这里提出一个观点并继续前进。

MassTransit 还支持许多功能,例如错误处理、事务(saga)、重试模式、调度、健康检查、断路器,使它们非常易于使用。我们在项目中使用了许多这些功能,也许我们将有机会在其他文章中介绍它们。

在本文中,我们将向您展示我们如何在我们的微服务项目中处理这个问题。我们将首先关注发送消息的部分(发送/发布 - 指南),然后使用它(消费者 - 报告)。现在让我们考虑“指南”服务中的设置。

 公共无效配置服务(IServiceCollection 服务)  
 {  
 services.AddMassTransit(x =>  
 {  
 //其他设置  
 x.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(cfg =>  
 {  
 cfg.host("host", h => //我们可以从配置文件中获取。  
 {  
 h.Username("用户名");  
 h.Password("密码");  
 });  
 ));  
 });  
 }

您需要从 NuGet 下载“MassTransit.RabbitMQ”包。由于 RabbitMQ 包依赖于 MassTransit 包,我们只需要下载即可。

 安装包 MassTransit.RabbitMQ -版本 8.0.6

我们已经完成了设置,现在是时候使用它了。

 公共类 GuideController : ControllerBase  
 {  
 私有只读 IBus _bus;  
 // MassTransit 为您执行 DI。  
 公共 GuideController(IBus 总线)  
 {  
 _bus = 总线;  
 }  
	  
 公共异步任务操作()  
 {  
 // 你可以在这里写你的其他代码  
 等待 _bus.Publish(YourModel);  
 }  
 }

我们在这里谈论的模型;它可以是dto、类、接口或记录。 MassTransit 推荐记录为“最佳实践”。这也是有原因的,我建议你看看这个线程。为了避免混淆,我不在这里讨论它。

现在让我们来到消费这个传入事件(consume)的报表服务。我们再次进行设置。

 公共无效配置服务(IServiceCollection 服务)  
 {  
 services.AddMassTransit(x =>  
 {  
 x.AddConsumer<YourConsumer> ();  
  
 x.AddBus(provider => Bus.Factory.CreateUsingRabbitMq(cfg =>  
 {  
 cfg.Host("主机", h =>  
 {  
 h.Username("用户名");  
 h.Password("密码");  
 });  
 cfg.ReceiveEndpoint("guide-service", ep =>  
 {  
 ep.ConfigureConsumer<YourConsumer> (提供者);  
 });  
 });  
 });  
 }

我们已经完成了我们的设置,现在让我们编写我们的类来捕捉这个过程。

 公共类YourConsumer:IConsumer<YourModel> //使用这个接口是强制的。  
 {  
 公共异步任务消耗(ConsumeContext<YourModel>语境)  
 {  
 var reportId = context.Message.ReportId;  
 等待 Console.Out.WriteLineAsync  
 ($"报告操作成功!报告ID:{reportId}。");  
 //我们可以在之前或之后编写您的其他代码。  
 }  
 }

我们可以通过 NuGet 为该服务下载相同的包来准备项目。

让我们以关于拖延症的圣训结束这篇文章。

“不要做一个自吹自擂的人;不要做交易员,除了买卖美好的事物。当然,他们是拖延行动的人。

(Musnad,1/129;见 Mecmau'z-Zevaid,5/172)。

最初发表于 https://malikmasis.blogspot.com .

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明

本文链接:https://www.qanswer.top/23078/31440913

posted @ 2022-09-09 13:32  哈哈哈来了啊啊啊  阅读(206)  评论(0编辑  收藏  举报