hexastack-grpc
High-performance gRPC presentation adapter, interceptors, and CQRS service integration for Hexastack.
Part of the Hexastack Framework · Governed by Hexaqual.
1. Overview & Capabilities
hexastack-grpc provides a binary RPC presentation adapter for Hexastack applications:
- Declarative Service Registration (
@grpc_service): Mounts generated protobuf RPC servicers onto thegrpc.Serverwith automatic DI resolution. - gRPC Health Checking Protocol: Standard
grpc.health.v1.Healthservicer (GrpcHealthServicer) supporting Kubernetes liveness, readiness, and stream health probes. - Bidirectional & Server-Streaming RPC Dispatch:
dispatch_rpc_stream_queryanddispatch_rpc_bidirectional_streamstreaming CQRS command and query pipelines over HTTP/2. - Cross-Cutting Interceptor Pipeline:
CorrelationServerInterceptor: Propagatesx-correlation-idfrom incoming metadata intoContextVar.LoggingServerInterceptor: Structured telemetry for RPC method invocations.TimingServerInterceptor: Measures RPC execution latency in milliseconds.MetricsServerInterceptor: Records RPC request rates, statuses, and handling durations toMetricsPort.
- Single-Pass Reflection: Automatically discovers and registers decorated servicers in Phase 3 module scanning via
create_grpc_visitor. - gRPC Server Reflection: Automatically enables gRPC Server Reflection Protocol when
grpcio-reflectionis installed.
2. Package Anatomy & Key Components
hexastack_grpc/
├── domain/ # GrpcError, ServiceRegistrationError, RpcExecutionError
├── adapters/ # create_async_grpc_server, run_grpc_server, GrpcHealthServicer
└── infra/
├── bootstrap.py # GrpcBootstrapper (order=40)
├── config.py # HexastackGrpcConfig
├── decorators.py# @grpc_service
├── dispatch.py # dispatch_rpc_command, dispatch_rpc_query, dispatch_rpc_stream_query, dispatch_rpc_bidirectional_stream
├── autodiscovery.py # create_grpc_visitor, autodiscover_grpc_services
├── interceptors/# correlation, logging, timing interceptors
└── registries/ # service.py (GrpcServiceRegistry)
3. Monorepo & Sibling Relationships
graph TD
subgraph Clients ["gRPC Clients (Microservices, Mobile, Gateway)"]
CLIENT["gRPC Protobuf Client"]
end
subgraph GrpcAdapter ["hexastack-grpc"]
SERVER["grpc.Server"]
INTERCEPTORS["Interceptors (Correlation, Logging, Timing)"]
REG["GrpcServiceRegistry"]
SERVICER["CQRS Protobuf Servicer"]
end
subgraph CQRSExecution ["hexastack-cqrs"]
CBUS["CommandBusPort"]
QBUS["QueryBusPort"]
end
CLIENT --> SERVER
SERVER --> INTERCEPTORS
INTERCEPTORS --> SERVICER
SERVICER -->|dispatches commands| CBUS
SERVICER -->|dispatches queries| QBUS
Explicit Dependencies (Direct)
hexastack-core: DI container (rodi), configuration registry, context variables.hexastack-cqrs:CommandBusPortandQueryBusPort.grpcio>=1.68.0,protobuf>=5.29.0.
Optional Integrations (Extras)
[reflection]: Installsgrpcio-reflection>=1.68.0for runtime service reflection tools (grpcurl, Postman).
4. Installation
# Standalone installation
pip install hexastack-grpc
# With Server Reflection support
pip install "hexastack-grpc[reflection]"
# Via umbrella package
pip install "hexastack[grpc]"
5. Configuration Reference
[hexastack.grpc]
host = "0.0.0.0"
port = 50051
max_workers = 10
enable_reflection = true
auto_start = false
6. Quickstart Example
from hexastack_core.infra.bootstrap import bootstrap
from hexastack_grpc.infra.decorators import grpc_service
# 1. Define Servicer implementing generated protobuf class
class GreeterServicer:
def SayHello(self, request, context):
return HelloReply(message=f"Hello, {request.name}!")
# 2. Register Servicer with generated add hook
@grpc_service(add_GreeterServicer_to_server)
class GreeterService(GreeterServicer):
pass
# 3. Bootstrap Runtime and Start Server
runtime = bootstrap(packages_to_scan=[__name__])
grpc_server = runtime.get("grpc_server")
grpc_server.start()
Metadata
Release files for hexastack-grpc 0.7.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| hexastack_grpc-0.7.0.tar.gz | 14.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hexastack_grpc-0.7.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 39.2 kB
Release files / hexastack_grpc-0.7.0.tar.gz
| Download URL | hexastack_grpc-0.7.0.tar.gz |
|---|---|
| Size | 14.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fd0887daa6d6dcffa35a92588b3b62433f49e5fc47bd76ff4f2e1770aa501870
|
|
BLAKE2b-256 checksum How to use checksums |
bbc700208812d670380370826fac0989e8a69321004df0bd09ca68a80ea9b0f1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / hexastack_grpc-0.7.0-py3-none-any.whl
| Download URL | hexastack_grpc-0.7.0-py3-none-any.whl |
|---|---|
| Size | 24.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
061d90ff96945c45d24aed2e8572e8eb9c908415ac086720b71cd1d3138c918e
|
|
BLAKE2b-256 checksum How to use checksums |
c2501edb18bc6a7cd659ae747c4cda00a427dc25147123ef243eb49b19cfdb22
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|