DotNetCore.CAP 基础应用

目录

1.准备工作

2.创建第一个项目   

3.创建第二个项目

4.运行


1.准备工作

  1.1 rabbitmq

username:admin

password:admin

port:5672

  1.2 mssql

2.创建第一个项目

    2.1 创建webapi项目,起名为Cap.Step1.Service如图:

    2.2 选择项目位置

    2.3 选择框架,由于是windows上,所以不要docker

    2.4 添加引用,如图

DotNetCore.CAP 6.1.0

DotNetCore.CAP.Dashboard 3.1.2

DotNetCore.CAP.RabbitMQ 6.1.0

DotNetCore.CAP.SqlServer 5.2.0    

   

 2.5   添加Cap的配置文件,MsSqlConnection用于存储业务数据的MsSql数据库,配置如下:

{
  "RabbitMQOptions": {
    "HostName": "192.168.2.8",
    "UserName": "admin",
    "Password": "admin",
    "Port": 5672
  }, 
 "MsSqlConnection": "Server=192.168.2.8;userid=sa;password=china_2020;Database=PtE"
}

2.6 添加服务端口号配置文件,配置如下:

{
  "urls": "http://*:5001"
}

2.7 最后配置文件位置如图:

  2.8 在Startup中添加 cap的相关配置

services.Configure<RabbitMQOptions>(Configuration.GetSection("RabbitMQOptions")); 
string connection = this.Configuration.GetConnectionString("MsSqlConnection"); 
services.AddCap(x =>
{  
    //存储消息数据
     x.UseSqlServer(configure => {
          configure.ConnectionString = connection;
          configure.UseSqlServer2008();
     });

    //连接RabbitMQ
    RabbitMQOptions rabbitMQ = this.Configuration.GetSection("RabbitMQOptions").Get<RabbitMQOptions>();
    x.UseRabbitMQ((options) =>
    {
        options = rabbitMQ;
    });

    x.FailedRetryCount = 10;        //失败后重试次数
    x.FailedRetryInterval = 60;     //重试间隔
    x.FailedThresholdCallback = failed =>
    {
        var logger = failed.ServiceProvider.GetService<ILogger<Startup>>();
        logger.LogError($"MessageType{failed.MessageType} 失败,重试{x.FailedRetryCount}" +
                        $"消息名称:{failed.Message.GetName()}");
    };
 }); 

    2.9 添加webapi 名为:Step1Controller 

[Route("[controller]")]
[ApiController]
public class Step1Controller : ControllerBase
{
    private readonly ICapPublisher capPublisher;
    private readonly IConfiguration configuration;
    private readonly ILogger<Step1Controller> logger;
    private string PublishName = "SHKF.Cap.Demo"; //下一步的消息队列Key

    public Step1Controller(ICapPublisher capPublisher, 
      IConfiguration configuration,
      ILogger<Step1Controller> logger)
    {
            this.capPublisher = capPublisher;
            this.configuration = configuration;
            this.logger = logger;
    } 
   [HttpGet()]
   public IActionResult Get()
    {
            //业务数据
            Dictionary<string, string> dicHeader = new Dictionary<string, string>();
            dicHeader.Add("Teacher", "WangPeng");
            dicHeader.Add("Student", "Seven");
            dicHeader.Add("Version", "1.2");
 
      using (var connection = new SqlConnection(this.configuration.GetConnectionString("MsSqlConnection")))
            { 
                using (var tran = connection.BeginTransaction(this.capPublisher, false))
                {
                    try
                    {
                        this.capPublisher.Publish(this.PublishName, dicHeader);
                    }
                    catch (Exception ex)
                    {
                        this.logger.LogWarning(ex.Message);
                        tran.Rollback();
                    }
                    tran.Commit(); 
                }
            } 
            this.logger.LogWarning($"This is AdoTransaction Invoke"); 
            return Ok();
        }
    }

    2.10 加载配置文件

public static void Main(string[] args)
{
    CreateHostBuilder(args)
      .ConfigureHostConfiguration((configBuilder) => {
          configBuilder.AddJsonFile("json/host.json", true);
          configBuilder.AddJsonFile("json/cap.json", true);
       })
      .Build().Run();
}

    3.11 修改launchSettings文件,删除iis相关内容,同时启动不访问默认页

{ 
  "profiles": { 
    "Cap.Step1.Service": {
      "commandName": "Project",
      "launchBrowser": false,
      "launchUrl": "weatherforecast",
      "applicationUrl": "http://localhost:5001",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }

3.创建第二个项目

    3.1 创建webapi项目

          项目引用, 配置文件, launchSettings文件和第一个项目相同,项目结构如下:

    3.2 由于不需要端口,所以把容器改成普通容器:如下图:

 public class Program
    {
        public static void Main(string[] args)
        {            
            CreateHostBuilder(args)
                .ConfigureServices(ConfigureServices)
                .ConfigureHostConfiguration((configBuilder) => {
                    configBuilder.AddJsonFile("json/host.json", true);
                    configBuilder.AddJsonFile("json/cap.json", true);
                })
                .Build().Run();
                .Build().Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args);

        private static void ConfigureServices(HostBuilderContext hostBuilder, IServiceCollection services)
        {
            IConfiguration Configuration = hostBuilder.Configuration;
            services.Configure<RabbitMQOptions>(Configuration.GetSection("RabbitMQOptions"));

            services.AddControllers(); 
            string connection = Configuration.GetConnectionString("MsSqlConnection"); 
            services.AddCap(x =>
            {
                // If you are using ADO.NET, choose to add configuration you needed:
                x.UseSqlServer(configure => {
                    configure.ConnectionString = connection;
                    configure.UseSqlServer2008();
                });

                // CAP support RabbitMQ,Kafka,AzureService as the MQ, choose to add configuration you needed:
                RabbitMQOptions rabbitMQ = Configuration.GetSection("RabbitMQOptions").Get<RabbitMQOptions>();
                x.UseRabbitMQ((options) =>
                {
                    options = rabbitMQ;
                });

                x.FailedRetryCount = 10;
                x.FailedRetryInterval = 60;
                x.FailedThresholdCallback = failed =>
                {
                    var logger = failed.ServiceProvider.GetService<ILogger<Startup>>();
                    logger.LogError($"MessageType{failed.MessageType} 失败,重试{x.FailedRetryCount}" +
                        $"消息名称:{failed.Message.GetName()}");
                };
                 
            });
        }
    }

    3.4 添加Step2Controller

4.运行

    4.1 运行Step1项目,Step2项目

    4.2 用postman发送请求 

http://localhost:5001/step1

    4.3 此时rabbmitmq中会多出交换机,cap.default.router

    4.5 同时数据库中会增加两个表:Published,Received,表里会存储每一步的发送数据,和第二步的接收数据,这两个表是自动创建的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wang_peng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值