前言:
此时姐妹们对“netaseventhandler”大致比较关怀,兄弟们都想要学习一些“netaseventhandler”的相关资讯。那么小编也在网摘上网罗了一些关于“netaseventhandler””的相关知识,希望你们能喜欢,看官们一起来学习一下吧!1 前置阅读
在阅读本文章之前,你可以先阅读:
RabbitMQ入门什么是观察者模式什么是事件总线如何使用RabbitMQ实现事件总线2 简介
MassTransit 是一个自由、开源、轻量级的消息总线, 用于使用. NET 框架创建分布式应用程序。MassTransit 在现有消息传输上提供了一组广泛的功能, 从而使开发人员能够友好地使用基于消息的会话模式异步连接服务。基于消息的通信是实现面向服务的体系结构的可靠和可扩展的方式。
3 使用
首先,将MassTransit的NuGet软件包安装到您的应用程序中。
MassTransitMassTransit.RabbitMQ
然后,创建具体事件源类。
/// <summary>/// 具体事件源类/// </summary>public class SendedEvent{ public string Name { get; private set; } public SendedEvent(string name) { Name = name; }}
接着,创建具体事件处理类,默认继承IConsumer<>接口。
/// <summary>/// 具体事件处理类顾客A/// </summary>public class CustomerASendedEventHandler : IConsumer<SendedEvent>{ public Task Consume(ConsumeContext<SendedEvent> context) { Console.WriteLine($"顾客A收到{context.Message.Name}通知!"); return Task.CompletedTask; }}/// <summary>/// 具体事件处理类顾客B/// </summary>public class CustomerBSendedEventHandler : IConsumer<SendedEvent>{ public Task Consume(ConsumeContext<SendedEvent> context) { Console.WriteLine($"顾客B收到{context.Message.Name}通知!"); return Task.CompletedTask; }}
最后,客户端调用。
static void Main(string[] args){ var bus = Bus.Factory.CreateUsingRabbitMq(sbc => { sbc.Host("rabbitmq://localhost"); sbc.ReceiveEndpoint("test_queue", ep => { ep.Consumer<CustomerASendedEventHandler>();// 订阅 ep.Consumer<CustomerBSendedEventHandler>(); }); }); bus.Start(); var sendedEvent = new SendedEvent("优惠"); Console.WriteLine($"商店发了{sendedEvent.Name}通知!"); bus.Publish(sendedEvent);// 发布 Console.ReadKey(); // press Enter to Stop bus.Stop();}
让我们来看看输出结果:
商店发布优惠通知!顾客A收到优惠通知。顾客B收到优惠通知。4 ASP.NET Core 使用
首先,将MassTransit的NuGet软件包安装到您的应用程序中。
MassTransitMassTransit.RabbitMQMassTransit.AspNetCore
然后,创建具体事件源类
/// <summary>/// 具体事件源类/// </summary>public class SendedEvent{ public string Name { get; private set; } public SendedEvent(string name) { Name = name; }}
接着,创建发布者代码:
往Startup.ConfigureServices中增加以下代码
services.AddMassTransit(x =>{ x.UsingRabbitMq();});services.AddMassTransitHostedService();
2.创建HomeController,发布事件
using EventBus.MassTransit.Events;using MassTransit;using Microsoft.AspNetCore.Mvc;using System.Threading.Tasks;namespace EventBus.MassTransit.Producer.WebApi01.Controllers{ [Route("[controller]")] [ApiController] public class HomeController : ControllerBase { private readonly IPublishEndpoint publishEndpoint; public HomeController(IPublishEndpoint publishEndpoint) { this.publishEndpoint = publishEndpoint; } [HttpPost] public async Task<ActionResult> Post() { await publishEndpoint.Publish<SendedEvent>(new SendedEvent("优惠")); return Ok(); } }}
接着,创建订阅者代码:
创建具体事件处理类
/// <summary>/// 具体事件处理类顾客A/// </summary>public class CustomerASendedEventHandler : IConsumer<SendedEvent>{ public Task Consume(ConsumeContext<SendedEvent> context) { Console.WriteLine($"顾客A收到{context.Message.Name}通知!"); return Task.CompletedTask; }}/// <summary>/// 具体事件处理类顾客B/// </summary>public class CustomerBSendedEventHandler : IConsumer<SendedEvent>{ public Task Consume(ConsumeContext<SendedEvent> context) { Console.WriteLine($"顾客B收到{context.Message.Name}通知!"); return Task.CompletedTask; }}往Startup.ConfigureServices中增加以下代码
services.AddMassTransit(x =>{ x.AddConsumer<CustomerASendedEventHandler>(); x.AddConsumer<CustomerBSendedEventHandler>(); x.UsingRabbitMq((context, cfg) => { cfg.ReceiveEndpoint("event-listener", e => { e.ConfigureConsumer<CustomerASendedEventHandler>(context); e.ConfigureConsumer<CustomerBSendedEventHandler>(context); }); });});services.AddMassTransitHostedService();
最后,执行Post()方法,在订阅者项目中跟踪会输出:
顾客A收到优惠通知。顾客B收到优惠通知。
标签: #netaseventhandler