Hi ABP Support,
We are enterprise subscribers, and we’ve invested in the ABP platform to build a distributed microservice system. However, we are currently finding that the default microservice template promotes tight coupling through shared libraries, project references, and centralized DB access—particularly regarding the Identity module.
We need your architectural guidance and possibly a working sample for:
How can we fully decouple all services so that each microservice is independently buildable, testable, package, and deployable, using only REST/gRPC or messaging for communication?
4 Answer(s)
-
0
Dear ABP Team,
We kindly request your assistance and an update regarding this request.
Thank you.
-
0
Hi,
You can use gRPC in your newly created custom services by following this article: https://abp.io/docs/commercial/8.1/startup-templates/microservice/using-grpc
But the pre-built ABP modules are using HTTP calls and distributed events to access each other, and Administrator service has to access multiple database to build all the application configuration properly. It's really tough to change it right now. We also discussed a lot of different cases and still most optimized way was this one.
I understand your concerns right now, especially if you use multi-repo and host your services in different repositories, this dependencies may become a bigger case to solve. You may push .Shared and .Contracts package to a private nuget server and consume them in a distributed repository case or use submodues of git, but each case will have different cons.
As a short answer, currently is not possible to fully decouple ABP's built-in services, but you can still build your services without coupling
-
0
Hi,
In the screenshot it seems you're using old microservice template. In the new template most of the problems are resolved. Can you try creating a new Microservice Template by using ABP Studio and check how it works. You may slowly migrate to the new pattern
-
0
You can still use Static Client Proxies in your existing project to prevent package dependencies with
.Contracts
packages. This dependency easily can be eliminated