net core-EventBus(CAP)

发布时间 2023-06-08 15:55:28作者: 斯蒂芬斯

一 微服务之间的相关通信就是通过EventBus实现的,调用接口也不现实,不然还得等接口返回结果,如果其他接口挂了呢,要等半天吗。

相关资料:

https://blog.51cto.com/u_15127692/3465750

https://github.com/dotnetcore/CAP

二 实际使用

1 appsetting:

"RabbitMQ": {
    "HostName": "127.0.0.1",
    "UserName": "guest",
    "Password": "guest",
    "VirtualHost": "blog",
    "ExchangeName": "blog_queue"
  },
"ConnectionStrings": {
    "postgres":"PORT=5432;DATABASE=demo;HOST=127.0.0.1;PASSWORD=1234;USER ID=postgres"
}

2 Program.cs

var services = builder.Services;
services.AddCap(options => {
    options.UsePostgreSql(builder.Configuration.GetConnectionString("postgres"));
    options.UseRabbitMQ(options =>
        {
            builder.Configuration.GetSection("RabbitMQ").Bind(options);
        });
});

3 发布,这样是到数据库里,但没有到RabbitMQ中。

[HttpGet("AdonetWithTransaction")]
    public IActionResult AdonetWithTransaction()
    {
        using (var connection = new NpgsqlConnection(ConnectionString))
        {
            using (var transaction = connection.BeginTransaction(_capBus, autoCommit: true))
            {
                //your business logic code

                _capBus.Publish("xxx.services.show.time", DateTime.Now);

                // Publish delay message
                _capBus.PublishDelayAsync(TimeSpan.FromSeconds(delaySeconds), "xxx.services.show.time", DateTime.Now);
            }
        }

        return Ok();
    }

待续。。。