.NET事件总线(消息队列)轻松应对高并发

源码点我

一眨眼时间又临近周末,又可以休息了

今天给大家介绍一个比较轻量级的事件总线:Jaina。

总体介绍:
Jaina核心类为一个BackgroundService,通过While来监听消息,默认存储实现为Channel,可能有的朋友没听过Channel,从.NETCore3.0微软开始提供Channel类,Channel类本质为线程安全队列,其中结合了信号量,简化了队列的使用。
因此Jaina完全可以替代一般的消息队列来使用,将业务进行解耦,轻松应对高并发(Jaina非常轻量非常简洁,代码写的也比较不错,有兴趣的可以去git上搜一下源码研究,以前类似的代码我都是手写的,哭…)。

实际应用:2核16g云服务器,单机模式,稳定万级并发(性能应该还没用完…手动无奈)。

下面来看具体用法:
1、Nuget搜索Jaina安装,首先创建一个订阅者,EventSubscribe标记为事件源ID,其实就是订阅的Topic,要与发布者一致。

namespace NET6.Api.Subscribers;

/// <summary>
/// 订阅者
/// </summary>
public class LoginSubscriber : IEventSubscriber
{
    [EventSubscribe(SubscribeEnum.登录事件)]
    public async Task LoginEvent(EventHandlerExecutingContext context)
    {
        Log.Error($"事件总线:{context.Source.Payload}");
        await Task.CompletedTask;
    }
}

2、打开Program,注入Jaina和订阅者。

#region 注入事件总线
builder.Services.AddEventBus(builder =>
{
    builder.ChannelCapacity = 5000;
    builder.AddSubscriber<LoginSubscriber>();
    builder.UnobservedTaskExceptionHandler = (obj, args) =>
    {
        Log.Error($"事件总线异常:{args.Exception}");
    };
});
#endregion

3、我们新建一个接口用来测试,这里发布者的事件源ID要与订阅者一致。

/// <summary>
    /// 事件总线
    /// </summary>
    /// <returns></returns>
    [AllowAnonymous]
    [HttpPost("pub")]
    [ProducesResponseType(StatusCodes.Status200OK)]
    public async Task<IActionResult> EventPubAsync()
    {
        await _eventPublisher.PublishAsync(new ChannelEventSource(SubscribeEnum.登录事件, "这里是用户登录消息"));
        return JsonView(true);
    }

4、启动项目,访问接口,发现消息已经成功打印出来
在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
事件总线消息队列是两种常见的消息传递机制,它们在实现方式和使用场景上有一些区别。 事件总线是一种发布-订阅模式的消息传递机制,用于解耦系统中的各个组件。它通过一个中心化的事件总线来传递消息,组件可以发布事件总线上,其他组件可以订阅感兴趣的事件并进行相应的处理。事件总线通常是异步的,发布者和订阅者之间没有直接的依赖关系。 消息队列是一种点对点的消息传递机制,用于解耦发送者和接收者之间的关系。它通过一个中间件来存储和传递消息,发送者将消息发送到队列中,接收者从队列中获取消息并进行处理。消息队列通常是异步的,发送者和接收者之间可以有时间上的解耦。 区别: 1. 使用方式:事件总线是发布-订阅模式,组件可以发布和订阅事件消息队列是点对点模式,发送者将消息发送到队列,接收者从队列中获取消息。 2. 依赖关系:事件总线中的组件之间没有直接的依赖关系,发布者和订阅者解耦;消息队列中的发送者和接收者之间也可以解耦,但是发送者需要知道消息队列的地址。 3. 中心化:事件总线通常是中心化的,通过一个中心化的事件总线来传递消息;消息队列可以是中心化的,也可以是分布式的,通过多个消息队列来传递消息。 4. 消息处理方式:事件总线通常是广播模式,一个事件可以被多个订阅者接收;消息队列是点对点模式,一个消息只能被一个接收者接收。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值