hexastack-grpc
High-performance gRPC presentation adapter, interceptors, and CQRS service integration for Hexastack.
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()
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
hexastack_grpc-0.3.0.tar.gz
(14.6 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hexastack_grpc-0.3.0.tar.gz.
File metadata
- Download URL: hexastack_grpc-0.3.0.tar.gz
- Upload date:
- Size: 14.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cff8c036e85a9bd554b2cae1340855ce7337647e80ec66faa27d61ab0a255923
|
|
| MD5 |
02b1d8ad666528d7e33429dcde195642
|
|
| BLAKE2b-256 |
69f2e4daf32ceb217975cc1e7afd40c5828eebab84bb049b25947603855a853d
|
File details
Details for the file hexastack_grpc-0.3.0-py3-none-any.whl.
File metadata
- Download URL: hexastack_grpc-0.3.0-py3-none-any.whl
- Upload date:
- Size: 24.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9a66066ceeff93adb54370aeba5933216724bfc64953fb43e69bb932aa81fcc1
|
|
| MD5 |
18588632e5a7d080caaa67a80ad4f22a
|
|
| BLAKE2b-256 |
dbf0ca0ced199b0eb6b91b5f1bcf0fffdd7d12388a5bf95f4ef204a281150609
|