In MicroService architect, Gateway plays the role 'Gateway for backend', each MicroService just need to know the gateway Url. And it's gateway forward the request from one Micro Service to corresponding target MicroService.
However, each MicroService has RemoteServices section, in appsettings.json as below. In this case, when MicroService A calls MicroService B's method, it's directly access MicroService B's Url or still forward the request to the gateway?
"RemoteServices": { "LxxxService": { "BaseUrl": "https://localhost:44502/", "UseCurrentAccessToken": "false" }, .. }
With ABP Micro Services, is it fine that two Micro Services actually point to same SQL server or MongoDb instance, but each takes care of a set of tables of its own.
With ABP Framework, when entity data is changed, it is written to AbpEntityChanges and AbpEntityPropertyChanges table.
Is the a way intercept Abp's implementation, so that we can do this: Get Old Entity Instance value, Get new Entity Instance value, this entity change is triggered via which API and by who. Then we sent whole data to an event bus.
Thanks
How to setup Serilog file retention policy in Abp Framework for all Micro Services?
I read throw Abp's document about IntegrationService, there is one question, would abp gateway reject request to Integration Service by default in a Micro Services architect.
In Abp MicroSerivce projects, if an API call triggered by UI to MicroService A Method1, and Method1 call Method2 in MicroService B. In Method2, if access CurrentTenant property, would it get the same value in Method1? This is the TenantId, CurrentUser penetrate issue across micro-services.
Thanks
With code below, at the second unit of work section, the line var dbData = repository.GetAsync(inserted.Id); throw exception, there is no Such Entity? Though if check database later, the new record is inserted into database successfully. Does Mongo driver cache the data somewhere?
[UnitOfWork(IsDisabled = true)]
public async Task SubmitAsync(XXXinput dto)
{
using var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true);
//Map dto to Domain entity
var inserted = await repository.InsertAysnc(domainEntity);
await uow.SaveChangesAsync();
await uow.CompleteAsync();
using var uow = _unitOfWorkManager.Begin(requiresNew: true, isTransactional: true);
var dbData = repository.GetAsync(inserted.Id);
//Other db operation
await uow.SaveChangesAsync();
await uow.CompleteAsync();
}
After reading this document page, https://docs.abp.io/en/abp/latest/Distributed-Event-Bus I am confused about shall I add distributed lock for event handler. Scenario: The event hander is within a Micro Service and Deployed with two instances. Shall I add distributed lock in event handler so that to make sure one message only processed once? Like code below:
public async Task HandleEventAsync(EntityDataSyncEto eto)
{
try
{
await using var handle = await _distributedLock.TryAcquireAsync("SyncEntityList");
if (handle != null)
{
_ = await _dataSyncAppService.ProcessEntity(eto);
}
}
catch (Exception ex)
{
_logger.LogException(ex);
}
}
Then I noticed with above lock, if there are several messages coming almost at the same time, some messages are missed to process in the event handler. Thanks, Domina
I tried the settings below, none of them works.
Configure<AbpDistributedEntityEventOptions>(options =>
{
options.AutoEventSelectors.Clear();
options.AutoEventSelectors.RemovelAll(x=>true);
options.AutoEventSelectors.Remove<JobLog>();
}
I have two MicroSerives, both has an Entity Called "JobLog", and I defined a shared Eto called "JobLogEto". Then both MicroSerivces binds to this JobLogEto from RabbitMQ's exchange binding info. Within one Micro Service, there is a code subscribe to this JobLogEto, and then I noticed there are duplicate records generated, if I manually unbind the second Micro Service to this eto, then no duplicate records insert. Even in second Micro Service, I didn't subscribe to this Eto. The event are triggered twice.
I see some AppService has [IntegrationService] above the AppService. With this annotation, does it mean this AppService are only available called by other Micro Service and Angular UI code can not call this App Service?