Install
$ agentstack add skill-burakdmir-abp-skills-abp-microservices ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
ABP Framework — Microservices
ABP v10.4 microservice template (Business+). Synchronous = Integration Services, asynchronous = distributed events. YARP gateway + OpenIddict auth server.
Trigger
"ABP microservices", "integration service", "inter-service communication", "distributed event", "YARP gateway", "auth server".
Structure
apps/{web,public-web,auth-server} gateways/web-gateway(YARP)
services/{administration,identity,...} etc/{docker,helm}
Services are NOT layered: a single project + *.Contracts (interface/DTO/ETO) + *.Tests. DbContext: IHasEventInbox, IHasEventOutbox.
Synchronous — Integration Service
// Contracts
[IntegrationService]
public interface IProductIntegrationService : IApplicationService
{ Task> GetProductsByIdsAsync(List ids); }
// Service
[IntegrationService]
public class ProductIntegrationService : ApplicationService, IProductIntegrationService { /* ... */ }
// Provider module: options.ExposeIntegrationServices = true;
// Consumer module: context.Services.AddStaticHttpClientProxies(typeof(CatalogServiceContractsModule).Assembly, "CatalogService");
abp generate-proxy -t csharp -u http://localhost:44361 -m catalog --without-contracts
"RemoteServices": { "CatalogService": { "BaseUrl": "http://localhost:44361" } }
> Use an Integration Service, not an application service. When: immediate response + data needed for the operation.
Asynchronous — Distributed Event (RabbitMQ)
[EventName("Product.StockChanged")]
public class StockCountChangedEto { public Guid ProductId { get; set; } public int NewCount { get; set; } }
await _distributedEventBus.PublishAsync(new StockCountChangedEto { ... });
public class Handler : IDistributedEventHandler, ITransientDependency
{ public async Task HandleEventAsync(StockCountChangedEto e) { } }
> When: state change notifications, loose coupling. Handlers must be idempotent.
Entity Cache
context.Services.AddEntityCache();
private readonly IEntityCache _cache; // _cache.GetAsync(id)
Built-in infrastructure: RabbitMQ, Redis, YARP, OpenIddict.
Best Practices
- Choose the right communication (synchronous query / asynchronous notification)
- Inter-service → Integration Service
- Share only Contracts, idempotent handlers
- Database-per-service, cache remote data
Related
- [Framework](../abp-framework/SKILL.md) · [API](../abp-api/SKILL.md) · [Infrastructure](../abp-infrastructure/SKILL.md) · [Deployment](../abp-deployment/SKILL.md)
- ABP Docs: https://abp.io/docs/latest/solution-templates/microservice
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: burakdmir
- Source: burakdmir/abp-skills
- License: MIT
- Homepage: https://abp.io/docs/latest
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.