actors, in hexagonal architecture 48
in hexagonal architecture 48 – 49
ALTS (Application Layer Transport Security) 6
application core, implementing 51 – 53
running 61 – 63
automatic mock generation 111 – 112
automation, for source code generation 40 – 42
BackoffExponentialWithJitter option 87
BackoffLinearWithJitter option 87
backward compatibility 43 – 45
adding/removing oneof fields 44 – 45
moving fields out of or into oneof fields 45
upgrading client but not server 44
upgrading server but not client 43 – 44
blue-green deployment 146 – 147
CD (continuous deployment) pipeline 127
certificate generation 97 – 98
certificate management 141 – 144
certificate usage in Ingress 143
certificates on client side 144
choreography-based saga 19 – 21
circuit breaker pattern 87 – 92
configuration for payment stub 72 – 73
handling errors on side of 78 – 79
load balancing on side of 67 – 68
upgrading client but not server 44
upgrading server but not client 43 – 44
CLIs (command-line interfaces) 48
command-line interfaces (CLIs) 48
connecting wires, in interservice communication 27 – 28
context.Background() parent context 84
continuous deployment (CD) pipeline 127
coverage information 123 – 124
CRDs (custom resource definitions) 141 – 142
Create endpoint 59 – 60, 74, 76 – 78, 120
Create method 37, 60, 68, 72
CreateOrderRequest message 32 – 33
CreatePaymentRequest message 24, 35
CreatePaymentResponse message 24
custom resource definitions (CRDs) 141 – 142
data consistency, handling in microservice architecture 18
database layer, end-to-end tests 117 – 118
db.Get() function verification 114
certificate management 141 – 144
certificate usage in Ingress 143
certificates on client side 144
eagle view of microservices deployment 133 – 134
NGINX Ingress controller 140 – 141
of monolithic applications 15 – 16
blue-green deployment 146 – 147
final thoughts on deployment 148 – 149
Docker Compose service definitions 116 – 117
docker-compose up operation 121
Elasticsearch, as logging backend 170 – 172
ELK stack (Elasticsearch-Logstash-Kibana) 158
encoding, protocol buffer 33 – 36
Docker Compose service definitions 116 – 117
Payment service layer 118 – 119
running tests against stack 120 – 123
and resilient communication 92 – 95
in interservice communication 75 – 80
handling errors on client side 78 – 79
returning error code and message 76 – 77
moving out of or into oneof fields 45
project 50 – 51
structure for end-to-end tests 117
adding/removing oneof fields 44 – 45
moving fields out of or into oneof fields 45
upgrading client but not server 44
upgrading server but not client 43 – 44
Get method 54, 56 – 57
Go source code, generating 25 – 27
gRPC adapter, implementing 57 – 61
gRPC endpoint, calling 63 – 64
code generation and interoperability 5
microservice architecture 17 – 22
choreography-based saga 19 – 21
orchestration-based saga 21 – 22
monolithic architecture 15 – 16
production-grade use cases 8 – 13
monitoring and observability 11 – 12
gRPC service-to-service communication 66 – 68
Order service implementation 49 – 64
dependency injection and running application 61 – 63
implementing application core 51 – 53
implementing gRPC adapter 57 – 61
IDL (Interface Definition Language) 5
NGINX Ingress controller 140 – 141
instrumentation, OpenTelemetry 159
test suite preparation 112 – 113
working with Testcontainers 113 – 115
internal/adapters/grpc package 73
interservice communication 31 – 46, 65 – 80
backward and forward compatibility 43 – 45
adding/removing oneof fields 44 – 45
moving fields out of or into oneof fields 45
upgrading client but not server 44
upgrading server but not client 43 – 44
depending on module and implementing ports and adapters 68 – 75
client configuration for payment stub 72 – 73
implementing payment adapter 71 – 72
payment adapter overview 69 – 70
using payment adapter in gRPC 73 – 75
handling errors on client side 78 – 79
returning error code and message 76 – 77
gRPC service-to-service communication 66 – 68
maintaining .proto files 38 – 42
automation for source code generation 40 – 42
proto project structure 38 – 40
protocol buffer encoding 33 – 36
generating Go source code 25 – 27
working with protocol buffers 24 – 25
Jaeger SPM (service performance monitoring) component 167
jaeger-prometheus Prometheus service name 162
Kibana as logging dashboard 172 – 174
eagle view of microservices deployment 133 – 134
NGINX Ingress controller 140 – 141
Elasticsearch as logging backend 170 – 172
Kibana as logging dashboard 172 – 174
OpenTelemetry interceptor for Order service 163 – 165
understanding metrics of Order service 165 – 167
LoadBalancer Service type 137 – 140, 144
Elasticsearch as backend for 170 – 172
Kibana as dashboard for 172 – 174
of Order service, understanding 165 – 167
microservice architecture 17 – 22
choreography-based saga 19 – 21
orchestration-based saga 21 – 22
production-grade use cases 9 – 10
microservice project setup 47 – 64
hexagonal architecture 47 – 49
Order service implementation 49 – 64
dependency injection and running application 61 – 63
implementing application core 51 – 53
implementing gRPC adapter 57 – 61
minikube tunnel command 143 – 144
automatic generation of 111 – 112
client configuration for payment stub 72 – 73
implementing payment adapter 71 – 72
payment adapter overview 69 – 70
using payment adapter in gRPC 73 – 75
monolithic architecture 15 – 16
New<Service_Name>Client naming convention 28
New<ServiceName>Client function 37
NewOrderClient(...) function 37
NGINX Ingress controller 140 – 141
nginx.conf. NGINX configurations 141
NodePort service type 137 – 139
Elasticsearch as logging backend 170 – 172
Kibana as logging dashboard 172 – 174
OpenTelemetry interceptor for Order service 163 – 165
understanding metrics of Order service 165 – 167
service performance monitoring 160 – 161
production-grade use cases 11 – 12
moving fields out of or into 45
service performance monitoring 160 – 161
OpenTelemetry interceptor for Order service 163 – 165
orchestration-based saga 21 – 22
Order model 54 – 56, 60, 69
Order service 39 – 40, 42
dependency injection and running application 61 – 63
implementing application core 51 – 53
implementing gRPC adapter 57 – 61
OpenTelemetry interceptor for 163 – 165
understanding metrics of 165 – 167
OrderDatabaseTestSuite type 113 – 114
ORM (Object Relational Mapping) library 54
payment stub, client configuration for 72 – 73
performance benefits of gRPC microservices 4
PlaceOrder 52 – 53, 59, 74, 78, 107 – 109, 154, 161
production-grade use cases 8 – 13
monitoring and observability 11 – 12
project structure, proto 38 – 40
.proto files, maintaining 38 – 42
automation for source code generation 40 – 42
in interservice communication 24 – 25
resilient communication 81 – 102
circuit breaker pattern 87 – 92
securing gRPC communication 95 – 101
certificate generation 97 – 98
ResourceExhausted response code 86 – 87
REST (Representational State Transfer) 6 – 7
RollingUpdate deployment 145 – 146
RPC (Remote Procedure Call) 6 – 7
choreography-based saga 19 – 21
orchestration-based saga 21 – 22
Save method 54, 56 – 57
scaling monolithic applications 16
SDKs (software development kits) 79
upgrading client but not server 44
upgrading, but not client 43 – 44
service performance monitoring 160 – 161
Service resource, Kubernetes 137 – 139
service-level agreement (SLA) 155
service-level indicator (SLI) 155
service-level objective (SLO) 155 – 157
service-to-service communication 66 – 68
Service, LoadBalancer Type 137
<ServiceName>Client function 37
Service – pod relationship 147
SLA (service-level agreement) 155
SLI (service-level indicator) 155
SLO (service-level objective) 155 – 157
software development kits (SDKs) 79
source code generation automation 40 – 42
stack, running tests against 120 – 123
status codes, in error handling 75 – 76
payment, client configuration for 72 – 73
test suite preparation 112 – 113
testing microservices 103 – 126
Docker Compose service definitions 116 – 117
Payment service layer 118 – 119
running tests against stack 120 – 123
test suite preparation 112 – 113
working with Testcontainers 113 – 115
coverage information 123 – 124
automatic mock generation 111 – 112
TLS (Transport Layer Security) 4
traces, in observability 154 – 155
UAT (user acceptance testing) 11
Unavailable response code 86 – 87
automatic mock generation 111 – 112
server, but not client 43 – 44
VCS (Version Control System) 11
wires, connecting in interservice communication 27 – 28
WithStreamingInterceptor interceptor usage 87