asp.net core使用 MassTransit.AmazonSQS连接AWS SQS 自定义SQS队列名与SNS主题名

asp.net core使用 MassTransit.AmazonSQS连接AWS SQS 转到

  1. 修改 ConfigureServices

    public override void ConfigureServices(ServiceConfigurationContext context)
    {
    context.Services.AddMassTransit(x =>
    {
    //添加 实现了 IConsumer 接口的类
    x.AddConsumer();

                 x.UsingAmazonSqs((context, cfg) =>
                 {
                     cfg.Host("us-east-1", h => {
                         h.AccessKey("your-iam-access-key");  //替换你AWS的Access key
                         h.SecretKey("your-iam-secret-key");    //替换你AWS的secret key
                     });
                      //修改代码:
                      //cfg.ConfigureEndpoints(context); 
                      	var formatter = new NameSpaceCustomFormatter(new DefaultEndpointNameFormatter(false));
                	 	cfg.MessageTopology.SetEntityNameFormatter(formatter);
                		cfg.ConfigureEndpoints(awscontext, formatter);
                 });
             });
             services.AddHostedService<Worker>();
         });
    

    }

NameSpaceCustomFormatter.cs

public class NameSpaceCustomFormatter : IEndpointNameFormatter, IEntityNameFormatter
{
    private readonly IEndpointNameFormatter defaultFormatter;
    /// <summary>
    /// 
    /// </summary>
    /// <param name="defaultFormatter"></param>
    public NameSpaceCustomFormatter(IEndpointNameFormatter defaultFormatter)
    {
        this.defaultFormatter = defaultFormatter;
    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="tag"></param>
    /// <returns></returns>
    public string TemporaryEndpoint(string tag)
    {
        return defaultFormatter.TemporaryEndpoint(tag);
    }
    /// <summary>
     ///     这里修改AWS SQS 队列名称
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <returns></returns>
    public string Consumer<T>() where T : class, IConsumer
    {
        var defaultName = defaultFormatter.Consumer<T>();
        // Please give this a bit more thought. This is just to make a point.
        var type = typeof(T).GetInterfaces().First().GenericTypeArguments.First();

        if (type.Namespace.Contains("command", StringComparison.OrdinalIgnoreCase))
        {
            return defaultName + ".fifo";
        }
        switch (defaultName)
        {
            case "Register":     // 对应类: RegisterConsumer
                defaultName = "自定义SQS队列名";
                break;

                break;
        }

        return defaultName;
    }
    /// <summary>
    ///     这里修改AWS SNS 主题名称
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <returns></returns>
    public string FormatEntityName<T>()
    {

        var type = typeof(T);

        if (type.Namespace.Contains("command", StringComparison.OrdinalIgnoreCase))
        {
            return type.Name + ".fifo";
        }
        switch(type.Name)
        {
            case "LoginDto":      //对应类:  LoginDto
                return "a自定义SNS主题名-"+ type.Name;
      
            default:
                return type.Name;
        }
    }

    /// <summary>
    /// 
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <returns></returns>
    public string Message<T>() where T : class
    {
        return defaultFormatter.Message<T>();
    }
    /// <summary>
    /// 
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <returns></returns>
    public string Saga<T>() where T : class, ISaga
    {
        return defaultFormatter.Saga<T>();
    }
    /// <summary>
    /// 
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <typeparam name="TArguments"></typeparam>
    /// <returns></returns>
    public string ExecuteActivity<T, TArguments>() where T : class, IExecuteActivity<TArguments> where TArguments : class
    {
        return defaultFormatter.ExecuteActivity<T, TArguments>();
    }
    /// <summary>
    /// 
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <typeparam name="TLog"></typeparam>
    /// <returns></returns>
    public string CompensateActivity<T, TLog>() where T : class, ICompensateActivity<TLog> where TLog : class
    {
        return defaultFormatter.CompensateActivity<T, TLog>();
    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="name"></param>
    /// <returns></returns>
    public string SanitizeName(string name)
    {
        return name;
    }
    /// <summary>
    /// 
    /// </summary>
    public string Separator { get; }
}

OK,查看一下AWS SQS 和AWS SNS就可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值