关于.net高并发商品秒杀方案

关于.net高并发商品秒杀方案

由于工作原因一直没有接触过高并发的项目,近期根据网上的教程整理了一个关于高并发的demo。Demo只在开发环境下使用,未上生产环境。第一次写文章,有啥子不好的地方请纠正

功能:商品抢购

使用场景:商城类型网站或者小程序等

开发工具:Visual Studio 2019、sql server2017、Jmeter、Visual Studio core、Nginx、RabbitMQ

框架:.net 5+ef core+swagger

数据库:sql server

缓存框架:redis 5.0 ----集群

消息队列:RabbitMQ

负载均衡:Nginx

消息总线框架:CAP

测试工具:Jmeter

参考文章:https://www.cnblogs.com/yaopengfei/category/1239348.html

Jmeter安装教程:https://blog.csdn.net/wust_lh/article/details/86095924

接口流程

在这里插入图片描述

数据库搭建

用户表,产品表,秒杀产品表,订单表,支付记录表(不使用),秒杀时间模型表(不使用):

用户表(User)
在这里插入图片描述
产品表(Product)
在这里插入图片描述
秒杀产品表(SeckillProduct)
在这里插入图片描述
订单表(Order),后期引入Redis NuGet包时名称会冲突建议不要用Order来命名
在这里插入图片描述
准备工作到这里差不多就完成了

VS2019创建新项目->选择ASP.NET Core Web应用程序->然后选择ASP.NET Core Web API(选择.net core 和ASP.NET Core 5.0 )
在这里插入图片描述
添加NuGet包: Microsoft.EntityFrameworkCore、Microsoft.EntityFrameworkCore.SqlServer、Swashbuckle.AspNetCore、EntityFramework、EFCore.BulkExtensions(如有遗漏请补充)

配置数据库:
appsettings.json添加数据库配置:

  "DBConnection": {
    "ConnectionStrings": { "Dbconn": "server=DESKTOP-236E652\\MSSQLSERVER2;database=MessageQueuing;Trusted_Connection=true" }
    //"ConnectionStrings": { "Dbconn": "server=DESKTOP-236E652\\MSSQLSERVER2;database=Demo;uid=sa;pwd=sa123456" }
  },

新建项目DBHelper,Common,Models,然后把实体类建好。
在这里插入图片描述
在Common项目中新建类DbHelperContext.cs(数据库连接类),继承DbContext,

    /// <summary>
    /// 数据库连接类
    /// </summary>
    public class DbHelperContext:DbContext
    {
        public DbHelperContext(DbContextOptions<DbHelperContext> options)
            : base(options)
        {

        }

        public DbSet<Order> Order { get; set; }
        public DbSet<PayRecord> PayRecord { get; set; }
        public DbSet<Product> Product { get; set; }
        public DbSet<SeckillProduct> SeckillProduct { get; set; }
        public DbSet<seckillTimeModel> seckillTimeModel { get; set; }
        public DbSet<User> User { get; set; }
        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {

        }
    }

到Startup.cs注册数据库连接类

        services.AddDbContext<DbHelperContext>(option =>
            {
                option.UseSqlServer(Configuration[string.Join(":", new string[] { "DBConnection", "ConnectionStrings", "Dbconn" })]);
            });

接下来配置路由

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapControllerRoute(
                   name: "default",
                   pattern: "{controller=Home}/{action=Index}/{id?}");
            });

开始配置Swagger: 添加NuGe包:IGeekFan.AspNetCore.Knife4jUI,这个版本下的Swagger ui页面看着舒服。在Common新建MiddlewareExtensions文件夹,然后再文件夹里添加SwaggerExtensions类,配置Swagger的基础信息,如标题,版本,路径

        public static void AddSwaggerExtensions(this IServiceCollection services)
        {
            services.AddSwaggerGen(x =>
            {
                x.SwaggerDoc("v1", new OpenApiInfo { Title = "MessageQueuing", Version = "v1" });
                x.OrderActionsBy(o => o.RelativePath);
                x.CustomOperationIds(apiDesc =>
                {
                    var controllerAction = apiDesc.ActionDescriptor as ControllerActionDescriptor;
                    if (controllerAction == null) return null;
                    return controllerAction.ControllerName + "-" + controllerAction.ActionName;
                });
                var basePath = Microsoft.DotNet.PlatformAbstractions.ApplicationEnvironment.ApplicationBasePath;
                var xmlFile = System.AppDomain.CurrentDomain.FriendlyName + ".xml";
                var xmlPath = Path.Combine(basePath, "MessageQueuing.xml");
                x.IncludeXmlComments(xmlPath, true);
            });
        }

然后到Startup.cs注册SwaggerExtensions类

//说明文档配置
services.AddSwaggerExtensions();

MiddlewareExtensions文件夹,继续添加SwaggerMiddlewareExtensions类,配置ui页面

        public static void UseSwaggerMiddlewareExtensions(this IApplicationBuilder app)
        {
            app.UseSwagger();
            app.UseKnife4UI(x =>
            {
                x.SwaggerEndpoint("/swagger/v1/swagger.json", "MessageQueuing v1");
            });
        }

依然到Startup.cs注册SwaggerMiddlewareExtensions类

            //文档说明
            app.UseSwaggerMiddlewareExtensions();

到这,项目基本的配置就完成了接下来开始进行接口开发和测试

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值