1. Integrate abp vNext with e***y aspcnetcore web api project. Current Abp Version 4.3.0
- Create an e***y web api project, called Adoption.Host.
- Install-Package Volo.Abp.AspNetCore/Volo.Abp.Swashbuckle.
- Create AdoptionHostModule impl AbpModule, add AbpAspNetCoreModule and AbpSwashbuckleModule DependsOnAttribute.
- Override ConfigureServices and OnApplicationInitialization
- Move code from startup to AdoptionHostModule, fill ConfigureServices and Configure in startup
2. Add Domain to sln
- Create an lib project, called Adoption.Domain.
- Install-Package Volo.Abp.AspNetCore/Volo.Abp.Ddd.Domain.
- Create AdoptionDomainModule impl AbpModule, add AbpDddDomainModule DependsOnAttribute.
- Create a Domain (e.g Animals) impl Entity or AggregateRoot or others.
3. Add Infrastruct project (e.g. dbcontext) to sln
- Create an lib project, called Adoption.Infrastruct.Data.
- Install-Package Microsoft.EntityFrameworkCore.Design to Adoption.Host. (Use ef5.0.5, becase ef6.0-preview have some problem now. 2021/4/26)
- Install-Package Microsoft.EntityFrameworkCore.Tools to Adoption.Infrastruct.Data.
- Install-Package Volo.Abp.AspNetCore/Volo.Abp.EntityFrameworkCore/Volo.Abp.EntityFrameworkCore.MySQL(or other) to Adoption.Infrastruct.Data.
- Create AdoptionInfrastructDataModule impl AbpModule, add AdoptionDomainModule and AbpEntityFrameworkCoreModule DependsOnAttribute.
- Create DbContext impl AbpDbContext , add DbSet, and you can override base methods if you need.
- AddAbpDbContext and Configure in AdoptionInfrastructDataModule ConfigureServices method.
4. Add Application Contracts to sln
- Create an lib project, called Adoption.Application.Contracts.
- Install-Package Volo.Abp.Ddd.Application.Contracts.
- Create Dto (e.g AnimalDto) impl EntityDto.
- Create AdoptionApplicationContractsMdoule impl AbpModule.
- Create 'Service' Interface inherit IApplicationService
5. Add Application to sln
- Create an lib project, called Adoption.Application.
- Install-Package Volo.Abp.AspNetCore/Volo.Abp.AutoMapper/Volo.Abp.Ddd.Application.
- Create AutoMapperProfile impl Profile.
- Create Serviceimpl inherit ApplicationService and impl 'Service'.
- Create AdoptionApplicationModule impl AbpModule, add AbpDddApplicationModule/AbpAutoMapperModule/AdoptionInfrastructDataModule/AdoptionApplicationContractsMdoule DependsOnAttribute.
- Configure in order to load all AutoMapperProfile in this module.
- Add AdoptionApplicationModule DependsOnAttribute to AdoptionHostModule.
6. Localization and VirtualFiles
- Add localization file to project.
- Add typeof(AbpLocalizationModule) (include AbpVirtualFileSystemModule) to Module.
- Configure AbpVirtualFileSystemOptions/AbpLocalizationOptions/AbpExceptionLocalizationOptions.
- Edit csproj like this:
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
</PropertyGroup>
<ItemGroup>
<EmbeddedResource Include="Localization\**\*.json" />
<Content Remove="Localization\**\*.json" />
<PackageReference Include="Microsoft.Extensions.FileProviders.Embedded" Version="5.0.5" />
</ItemGroup>
- Add Configure AbpLocalizationOptions and app.UseAbpRequestLocalization()/app.UseStaticFiles() to Host Module.
7. FluentValidation
- Install-Package Volo.Abp.FluentValidation to Adoption.Application.Contracts.
- Add Validator impl AbstractValidator ,then abp runtime will identify Validator automatically.
- AdoptionApplicationContractsMdoule MUST BE ADD AS DependsOn to Adoption.Application.
8. Background Jobs
- Install-Package Volo.Abp.BackgroundJobs.Abstractions and Volo.Abp.BackgroundJobs.RabbitMQ to Adoption.Application.
- Add AbpBackgroundJobsRabbitMqModule DependsOnAttribute to Module.
- (option) Configure AbpRabbitMqOptions. If not, abp will use appsetting.json as default.(job will use Queue directly)
- impl your own job logic impl AsyncBackgroundJob and ITransientDependency, T is job parameter. Then abp runtime will identify Job automatically.
9. Distributed Event Bus (rabbitmq)
- Install-Package Volo.Abp.EventBus.RabbitMQ to Adoption.Application.
- Add AbpEventBusRabbitMqModule DependsOnAttribute to Module.
- (option) Configure AbpRabbitMqOptions. Same as Background Jobs.(ClientName is Queuename)
- Create Event Transfer Objects(Eto) With especial EventNameAttribute. It will be used as rabbitmq Routing key.
- Use IDistributedEventBus.PublishAsync to publish message.
- impl IDistributedEventHandler will add a subscribe to T. Then abp runtime will identify subscribe automatically.
00. Environment
- mariadb
docker run -p 127.0.0.1:3306:3306 --name mariadb -e MYSQL_ROOT_PASSWORD=123456 -d mariadb
- mirage database
add-migration init -Context AdoptionDbContext
update-database -Context AdoptionDbContext
-
debug in docker
https://code.visualstudio.com/docs/containers/quickstart-aspnet-core
-
rabbit in docker
docker run -itd --hostname Terraform --name AbpEventMQ -e RABBITMQ_DEFAULT_USER=user -e RABBITMQ_DEFAULT_PASS=password -p 15672:15672 -p 5672:5672 rabbitmq:3-management
- kafka in docker
docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper
docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=10.0.0.4:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://10.0.0.4:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka
docker exec -it 245317b191e2 /bin/bash
cd opt/kafka/bin
kafka-topics.sh --create --zookeeper 10.0.0.4:2181 --replication-factor 1 --partitions 1 --topic mykafka
kafka-console-producer.sh --broker-list localhost:9092 --topic mykafka
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic mykafka --from-beginning