太阳集团tyc5997|官网【中国】有限公司

RedisMQ在Asp.net核心的简单应用实现
  • 作者:admin
  • 发表时间:2021-01-01 07:50
  • 来源:未知

本文主要介绍RedisMQ在Asp.net核心网的简单应用和实现。通过示例代码详细介绍,对大家的学习或工作有一定的参考学习价值。需要它的朋友将和边肖一起学习。

最近,一个外部项目使用了消息队列,最初是用rabbitmq实现的。但是因为部署到别人的服务器上,需要尽可能的简化,而且项目要访问redis缓存,所以尝试使用redis实现简单的消息队列。

使用redis作为消息队列有两种方式,一种是使用pub/sub,另一种是使用list结构用brpop消费。这两种方法各有特点,这里简单介绍一下:

发布/订阅模式支持多客户端消费,但不支持持久性,这意味着客户端断开连接期间发布的所有消息都将被丢弃。

列表与brpop配合使用,brpop默认不支持多客户端消费,支持持久化。这种多客户端消费模式可以通过伪装实现,比如下面的伪代码:

#步骤1将消息推送到队列

lpush listA消息

#步骤2,一个特殊的分发客户端取出消息并将其推送到每个子队列

var msg=brpop listA

lpush列表1消息

lpush列表2消息

.

#第3步:多个客户端使用来自相应队列的消息

var client1_msg=brpop listA1

var client2_msg=brpop listA2

.

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

Stackexchange。Redis是老式的客户端,但由于其复用方式,无法支持redis的阻塞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服务)

{

//redis配置

RedisHelper。初始化(新的CSRedis。CSRedisClient(配置。GetConnectionString(' redis '));

}

当然,您也可以通过依赖注入的方式添加CSRedisClient实例,这并不复杂。

队列在项目的几个地方使用,所以首先封装一个消费者服务:

公共抽象类RedisMQConsumer : background service

{

受保护的抽象字符串CacheKey { get}

受保护的ILoggerRedisMQConsumer记录器;

公共RedisMQConsumer(ILoggerRedisMQConsumer记录器)

{

this.logger=logger

}

受保护的覆盖任务执行异步(取消令牌停止超时)

{

返回任务。运行(异步()=

{

while(!停止肯。IsCancellationRequested)

Baidu
sogou