public async Task <int> Handle(CreateOrderRequest request, CancellationToken cancellationToken) { var strategy = dbContext.Database.CreateExecutionStrategy(); await strategy.ExecuteAsync(async() => { using (var trans = dbContext.Database.BeginTransaction(capBus, autoCommit: true)) { //业务代码 var query = dbContext.Products.FirstOrDefault(p => p.ProductCode == request.Model.ProductCode); if (query == null) { throw new FriendlyException() { ExceptionCode = 404, ExceptionMessage = $"The product: {request.Model.ProductCode} does not exists." }; } query.ProductAmount--; string orderNO = DateTime.Now.ToString("yyyyMMddHHmmssfff").ToString(); string accessToken = await httpContextAccessor.HttpContext.GetTokenAsync("access_token"); CreateOrderCapMessage capMessage = new CreateOrderCapMessage() { AccessToken = accessToken, OrderNO = orderNO, ProductCode = query.ProductCode }; capBus.Publish("productservice.orderingservice.createorder", capMessage); await dbContext.SaveChangesAsync(cancellationToken); } }); return(1); }
public async Task CreateOrder(CreateOrderCapMessage capMessage) { ISubscriberCallApi callApi = RestService.For <ISubscriberCallApi>(Configuration["ApiGatewayService:Url"], new RefitSettings() { AuthorizationHeaderValueGetter = () => Task.FromResult <string>(capMessage.AccessToken) }); await callApi.AddOrder(new AddOrderModel() { OrderNO = capMessage.OrderNO, ProductCode = capMessage.ProductCode }); }