C# RabbitMq学习三

Abp框架中使用分布式事件总线RabbitMq

目前在做一个项目,需要A服务中数据库变化的时候,通知B服务,就需要 分布式事件总线RabbitMq来解决

  • 分布式事件总线系统:允许发布订阅跨应用/服务边界传输的事件. 你可以使用分布式事件总线在微服务应用程序之间异步发送和接收消息. 

  • 预定义事件:如果你配置,ABP框架会为实体自动发布创建,更新和删除分布式事件.

发布事件:

.Domain文件中

[DependsOn(
        typeof(FileManagementDomainSharedModule)
        )]
    public class FileManagementDomainModule : AbpModule
    {
        public override void ConfigureServices(ServiceConfigurationContext context)
        {
            Configure<AbpDistributedEntityEventOptions>(options =>
            {
                options.AutoEventSelectors.Add<DeviceAcquisitionIq>();
                options.EtoMappings.Add<DeviceAcquisitionIq, IQEto>();
                options.AutoEventSelectors.Add<DeviceInspectionIq>();
                options.EtoMappings.Add<DeviceInspectionIq, IQEto>();
                options.AutoEventSelectors.Add<UserUploadIq>();
                options.EtoMappings.Add<UserUploadIq, IQEto>();
                options.AutoEventSelectors.Add<PlatformAcquisitionIq>();
                options.EtoMappings.Add<PlatformAcquisitionIq, IQEto>();
            });
            Configure<AbpAutoMapperOptions>(options =>
            {
                //Add all mappings defined in the assembly of the MyModule class
                options.AddMaps<FileManagementDomainModule>();
            });
            base.ConfigureServices(context);
        }
    }

订阅事件:

事件类型

有三种预定义的事件类型:

  • EntityCreatedEto<T> 是实体 T 创建后发布.
  • EntityUpdatedEto<T> 是实体 T 更新后发布.
  • EntityDeletedEto<T> 是实体 T 删除后发布.
 public class DeleteIQFileEventHandler : IDistributedEventHandler<EntityDeletedEto<IQEto>>,
       ITransientDependency
    {
        private IServiceScopeFactory _serviceScopeFactory;
        private ILogger _logger;
        public DeleteIQFileEventHandler(IServiceScopeFactory serviceScopeFactory, ILogger<DeleteIQFileEventHandler> logger)
        {
            _serviceScopeFactory = serviceScopeFactory;
            _logger = logger;
        }
        public async Task HandleEventAsync(EntityDeletedEto<IQEto> eventData)
        {
            _logger.LogInformation("删除IQ文件:" + eventData.Entity.AcquisitionId);
            try
            {
                using (var scope = _serviceScopeFactory.CreateScope())
                {
                    var iqEto = eventData.Entity;
                    var mgr = scope.ServiceProvider.GetRequiredService<IUnitOfWorkManager>();
                    var repository =
                        scope.ServiceProvider.GetRequiredService<IIQFileRepository>();
                    var file = await repository.FindAsync(r => r.AcquisitionId == iqEto.AcquisitionId);
                    if (file != null)
                    {
                        DirectoryInfo dir = new DirectoryInfo(file.DataFile);
                        if(dir.Exists)
                        {
                            dir.Delete(true);
                        }
                        await repository.DeleteAsync(file.Id);
                    }

                }


            }
            catch (Exception ex)
            {
                _logger.LogInformation("RabbitMq错误信息:" + ex);
            }

        }
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值