一 微服务之间的相关通信就是通过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(); }
待续。。。