1 Star 2 Fork 2

胖纸不争 / Powers.MemoryMQ

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.MD 1.61 KB
一键复制 编辑 原始数据 按行查看 历史
Powers 提交于 2022-04-20 09:53 . Initial commit

MemoryMQ

在内存中使用Channel实现的简单队列, 适合一般场景.

使用方法(net6)

Program.cs中添加以下代码, 分别用于注册生产者Producer和消费者Consumer的服务:

builder.Services.AddMemoryMQProducer();
builder.Services.AddMemoryMQConsumer();

// 关于消费者, 还需要实现一个后台服务
builder.Services.AddHostedService<MemoryMQService>();

消费者实现:

[ApiController]
[Route("api/[Controller]/[Action]")]
public class TestController : ControllerBase
{
    private readonly IMessageProducer<string, object> _producer;

    public TestController(IMessageProducer<string, object> producer)
    {
        _producer = producer;
    }

    [HttpGet]
    public async Task<IActionResult> Get(string key, string value)
    {
        // 向MQ中推送消息
        await _producer.ProduceAsync(key, value);

        return NoContent();
    }
}

消费者实现:

public class MemoryMQService : BackgroundService
{
    private readonly IMessageConsumer<string, object> _consumer;

    public MemoryMQService(IMessageConsumer<string, object> consumer)
    {
        _consumer = consumer;
    }

    protected override Task ExecuteAsync(CancellationToken stoppingToken)
    {
        // 从MQ中消费消息
        _consumer.OnMessage(async (message) =>
        {
            await Task.Run(() =>
            {
                Console.WriteLine($"Key: {message.Item1.ToString()}, Value: {message.Item2.ToString()}");
            });
        });

        return Task.CompletedTask;
    }
}

Sample示例:

示例

C#
1
https://gitee.com/DonPangPang/Powers.MemoryMQ.git
git@gitee.com:DonPangPang/Powers.MemoryMQ.git
DonPangPang
Powers.MemoryMQ
Powers.MemoryMQ
main

搜索帮助