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.8.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.8.0.tar.gz | 15.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| hexastack_grpc-0.8.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 39.6 kB
Release files / hexastack_grpc-0.8.0.tar.gz
| Download URL | hexastack_grpc-0.8.0.tar.gz |
|---|---|
| Size | 15.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a68bcf495d0eeac737e7876b1ff385527bf4e53561bbc5a3dced08fbfe150bd8
|
|
BLAKE2b-256 checksum How to use checksums |
314bda152dfdd53297bf0be4d308785fddfc043e79ef3cd03e266b1f00e16aaa
|
| 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.8.0-py3-none-any.whl
| Download URL | hexastack_grpc-0.8.0-py3-none-any.whl |
|---|---|
| Size | 24.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
39b49b9aa973a85194ae7e4114990818979b733fcbe24d289a95f739e7e7b824
|
|
BLAKE2b-256 checksum How to use checksums |
66c0b34070805378e49aea74d29a177c1122683d783cef56df1fe1aad59d7518
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|