小程序制作平台网站设计平台 互联网品牌制作专家
关于A5客户收购GoogleAdsense带有搜索账户的相关事宜更多

软文发布平台资讯中心

Asp.netc�ϣ�e中RedisMQ的简单应用实现

Asp.netc�ϣ�e中RedisMQ的简单应用实现

  互联网品牌圈关注到Asp.netc�ϣ�e中RedisMQ的简单应用实现

这篇文章主要介绍了Asp.net core中RedisMQ的简单应用实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

最近一个外部的项目,使用到了消息队列,本来是用rabbitmq实现的,但是由于是部署到别人家的服务器上,想尽量简化一些,项目中本来也要接入了redis缓存,就尝试使用redis来实现简单的消息队列。

使用redis做消息队列有两种方法,一种是使用pub/sub,另一种是使用list结构,配合brpop来消费。这两种方式各有特点,这里简述一下:

pub/sub模式,支持多客户端消费,但是不支持持久化,这就意味着客户端断开的时间内发布的消息将会全部舍弃掉。

list配合brpop,默认不支持多客户端消费,支持持久化。这种模式的多客户端消费可以变相实现,比如下面的伪代码:

#第一步push消息到队列lpush listA msg#第二步,一个专门的分发客户端取出消息,push到各个子队列var msg=brpop listAlpush listA1 msglpush listA2 msg......#第三步,多个客户端从对应的队列消费消息var client1_msg= brpop listA1var client2_msg= brpop listA2......

消息丢失不太可取,所以我选择了list ,下一步需要选择一个合适的客户端。

Stackexchange.redis 算是一个老牌的客户端了,但是由于其采用多路复用的模式,没法支持Redis的blocking pops特性。所以我采用了国人写的CSRedisCore。

首先需要在appsettings.json中添加redis的连接字符串:

{ "ConnectionStrings": { "redis": "{ip}:{port},password=123456,prefix=my_" }}

具体配置请参考github上的文档:https://github.com/2881099/csredis

然后在startup.cs的ConfigureServices中配置redis:

public void ConfigureServices(IServiceCollection services) { //redis配置 RedisHelper.Initialization(new CSRedis.CSRedisClient(Configuration.GetConnectionString("redis"))); }

当然也可以采用依赖注入的方式添加CSRedisClient实例,这个不纠结。

在项目中有好几处使用到了队列,所以先封装一个消费服务:

public abstract class RedisMQConsumer : BackgroundService { protected abstract string CacheKey { get; }

protected ILogger<RedisMQConsumer> logger;

public RedisMQConsumer(ILogger<RedisMQConsumer> logger) { this.logger = logger; }

protected override Task ExecuteAsync(CancellationToken stoppingToken) { return Task.Run( async() => { while (!stoppingToken.IsCancellationRequested) { try { var msg = RedisHelper.BRPop(5, CacheKey); try { if (string.IsNullOrEmpty(msg)) continue; if (!Process(msg)) { //加入错误处理队列,可以在后台写功能手动处理 RedisHelper.LPush(CacheKey + "_err", msg); } } catch (Exception exp) { //加入错误处理队列,可以在后台写功能手动处理 RedisHelper.LPush(CacheKey + "_err", msg); logger.LogError(exp, "RedisMQConsumer Execute error"); } } catch { //网络可能中断 await Task.Delay(TimeSpan.FromSeconds(5), stoppingToken); } } }, stoppingToken); }

protected abstract bool Process(string message); }

然后就可以继承RedisMQConsumer,编写实际逻辑:

public class AddOrderMQConsumer : RedisMQConsumer { public AddOrderMQConsumer(ILogger<RedisMQConsumer> logger) : base(logger) { } protected override string CacheKey => "addOrder"; protected override bool Process(string message) { var order = JsonSerializer.Deserialize<Order>(message); //处理逻辑 return true; } }

发布消息只是往队列中添加项:

RedisHelper.LPush("addOrder", order);

最后把消费服务添加到startup.cs中:

public void ConfigureServices(IServiceCollection services) { //redis配置 RedisHelper.Initialization(new CSRedis.CSRedisClient(Configuration.GetConnectionString("redis"))); //redis消息队列消费服务,放在redis配置下方 services.AddHostedService<AddOrderMQConsumer>(); }

经测试,还算稳定,小并发项目可以使用。

到此这篇关于Asp.net core中RedisMQ的简单应用实现的文章就介绍到这了,更多相关Asp.net core RedisMQ内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

来源:脚本之家

链接:https://www.jb51.net/article/201718.htm

尊敬的看官您对Asp.netc�ϣ�e中RedisMQ的简单应用实现有什么看法呢?互联网品牌制作专家愿与您共同探讨!版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请加微信号oem365 举报,一经查实,本站将立刻删除。

上一篇: asp.netc�ϣ�e中如何使用cookie身份验证   返 回   下一篇:如何提高论坛人气

相关资讯

小程序应用场景 | 小程序解决方案 | 小程序案例 | 小程序应功能 | 软文发布资源 | 网站设计

酒店预约解决方案
酒店预约小程序走红网络,也是传统转型的重要变化
详情
投票解决方案
强大功能,傻瓜式管理,有效防止作弊刷票
详情
新零售解决方案
小程序是现在新零售的新方式,深度结合线上线下
详情
预约服务解决方案
预约到店小程序通过用户在线预约到店等
详情
企业官网解决方案
企业展示小程序主要展示企业信息、产品案例等
详情
教育培训解决方案
主要展示教育机构的课程、可在线预约与购买课程
详情
推广解决方案
可以让企业通过推广模式全面展示自己的产品
详情
到店解决方案
到店服务解决方案,主要是面向实体餐饮门店
详情

我们的服务是否能满足您的需求?

如果不能,请联系我们或给我们留言,我们收到后会第一时间联系您!感谢您对我们的关注!

粤公网安备 44200002005005号