About the Author |
|
ix | |
About the Technical Reviewer |
|
xi | |
|
|
1 | (8) |
|
|
1 | (1) |
|
|
2 | (1) |
|
How Is This Book Different from Other Books and Guides? |
|
|
3 | (2) |
|
Reasoning Behind the Techniques |
|
|
3 | (1) |
|
Learning: An Incremental Process |
|
|
4 | (1) |
|
Is This a Guide or a Book? |
|
|
4 | (1) |
|
|
5 | (2) |
|
From the Basics to Advanced Topics |
|
|
5 | (1) |
|
Skeleton with Spring Boot, the Professional Way |
|
|
5 | (1) |
|
|
6 | (1) |
|
|
6 | (1) |
|
|
6 | (1) |
|
|
7 | (1) |
|
|
7 | (2) |
|
Chapter 2 The Basic Spring Boot Application |
|
|
9 | (14) |
|
|
9 | (1) |
|
|
10 | (3) |
|
Skinny vs. Real-Life Apps |
|
|
10 | (1) |
|
|
11 | (2) |
|
Warming Up: Some TDD in Action |
|
|
13 | (8) |
|
|
21 | (2) |
|
Chapter 3 A Real Three-Tier Spring Boot Application |
|
|
23 | (76) |
|
|
23 | (3) |
|
|
26 | (7) |
|
|
33 | (5) |
|
|
38 | (3) |
|
The Presentation Layer (REST API) |
|
|
41 | (12) |
|
The Multiplication Controller |
|
|
43 | (5) |
|
|
48 | (5) |
|
The Frontend (Web Client) |
|
|
53 | (5) |
|
Playing with the Application (Part I) |
|
|
58 | (1) |
|
New Requirements for Data Persistence |
|
|
59 | (4) |
|
|
63 | (5) |
|
|
68 | (19) |
|
|
71 | (6) |
|
|
77 | (10) |
|
Completing User Story 2: Going Through the Layers |
|
|
87 | (7) |
|
Playing with the Application (Part II) |
|
|
94 | (3) |
|
|
97 | (2) |
|
Chapter 4 Starting with Microservices |
|
|
99 | (80) |
|
The Small Monolith Approach |
|
|
99 | (7) |
|
|
103 | (2) |
|
|
105 | (1) |
|
|
106 | (2) |
|
Points, Badges, and Leaderboards |
|
|
106 | (1) |
|
Applying It to the Example |
|
|
107 | (1) |
|
Moving to a Microservices Architecture |
|
|
108 | (2) |
|
Separation of Concerns and Loose Coupling |
|
|
108 | (1) |
|
|
109 | (1) |
|
|
109 | (1) |
|
|
110 | (2) |
|
Event-Driven Architecture |
|
|
112 | (7) |
|
|
113 | (1) |
|
Pros and Cons of Event-Driven Architecture |
|
|
114 | (3) |
|
|
117 | (1) |
|
Applying Event-Driven Architecture to the Application |
|
|
118 | (1) |
|
Going Event-Driven with RabbitMQ and Spring AMQP |
|
|
119 | (2) |
|
Using RabbitMQ in Your System |
|
|
120 | (1) |
|
|
121 | (1) |
|
Sending Events from Multiplication |
|
|
121 | (33) |
|
|
122 | (3) |
|
|
125 | (3) |
|
Sending the Event: Dispatcher Pattern |
|
|
128 | (6) |
|
Deeper Look at the New Gamification Microservice |
|
|
134 | (20) |
|
Receiving Events with RabbitMQ |
|
|
154 | (6) |
|
|
154 | (1) |
|
|
154 | (3) |
|
|
157 | (3) |
|
Requesting Data Between Microservices |
|
|
160 | (13) |
|
Combining Reactive Patterns and REST |
|
|
160 | (2) |
|
|
162 | (3) |
|
Implementing the REST Client |
|
|
165 | (5) |
|
Updating Gamification's Business Logic |
|
|
170 | (3) |
|
Playing with the Microservices |
|
|
173 | (3) |
|
|
176 | (3) |
|
Chapter 5 The Microservices Journey Through Tools |
|
|
179 | (88) |
|
|
179 | (1) |
|
Extracting the UI and Connecting It to Gamification |
|
|
180 | (20) |
|
Moving the Static Content |
|
|
182 | (2) |
|
Connecting UI with Gamification |
|
|
184 | (3) |
|
Changes to Existing Services |
|
|
187 | (3) |
|
A New, Better UI with (Almost) No Effort |
|
|
190 | (10) |
|
|
200 | (2) |
|
Service Discovery and Load Balancing |
|
|
202 | (7) |
|
|
202 | (3) |
|
|
205 | (2) |
|
Polyglot Systems, Eureka, and Ribbon |
|
|
207 | (2) |
|
Routing with an API Gateway |
|
|
209 | (9) |
|
|
209 | (5) |
|
Zuul, Eureka, and Ribbon Working Together |
|
|
214 | (4) |
|
|
218 | (36) |
|
Implementing the API Gateway with Zuul |
|
|
218 | (19) |
|
Playing with Service Discovery |
|
|
237 | (4) |
|
Are Our Microservices Ready to Scale? |
|
|
241 | (3) |
|
Load Balancing with Ribbon |
|
|
244 | (10) |
|
Circuit Breakers and REST Clients |
|
|
254 | (9) |
|
Circuit Breakers with Hystrix |
|
|
254 | (1) |
|
|
255 | (3) |
|
Hystrix from a REST Client |
|
|
258 | (3) |
|
REST Consumers with Feign |
|
|
261 | (2) |
|
Microservices Patterns and PaaS |
|
|
263 | (1) |
|
|
264 | (3) |
|
Chapter 6 Testing the Distributed System |
|
|
267 | (48) |
|
|
267 | (2) |
|
|
269 | (2) |
|
|
271 | (2) |
|
|
273 | (41) |
|
Creating an Empty Project and Choosing the Tools |
|
|
274 | (4) |
|
Making the System Testable |
|
|
278 | (9) |
|
Writing the First Cucumber Test |
|
|
287 | (4) |
|
Linking a Feature to Java Code |
|
|
291 | (11) |
|
|
302 | (6) |
|
Reusing Steps Across Features |
|
|
308 | (3) |
|
Running Tests and Checking Reports |
|
|
311 | (3) |
|
|
314 | (1) |
|
Appendix A Upgrading to Spring Boot 2.0 |
|
|
315 | (8) |
|
|
315 | (1) |
|
Upgrading the Dependencies |
|
|
316 | (3) |
|
Fixing the Breaking Changes |
|
|
319 | (2) |
|
The CrudRepository Interface Does Not Include findOne() |
|
|
319 | (1) |
|
Actuator Endpoints Have Been Moved |
|
|
320 | (1) |
|
Applying Optional Updates |
|
|
321 | (1) |
|
The WebMvcConfigurerAdapter Class Has Been Deprecated |
|
|
321 | (1) |
|
Working with Spring Boot 2.0 |
|
|
322 | (1) |
Afterword |
|
323 | (2) |
Index |
|
325 | |