Π₯Π΅Ρ Π₯Π°Π±Ρ.
Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ ΠΆΠ΅Π»ΠΈΠΌ Π΄Π° Π³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ ΡΠ²ΠΎΠΌ ΠΈΡΠΊΡΡΡΠ²Ρ Ρ ΡΡΠ²Π°ΡΠ°ΡΡ ΠΎΠΊΡΡΠΆΠ΅ΡΠ° Π·Π° ΡΡΠ΅ΡΠ΅ Π·Π° Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠ°ΡΠ΅ ΡΠ° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΈΠΌΠ°. ΠΠ°Π΄Π° ΡΠ°ΠΌ Π½Π°ΡΡΠΈΠΎ ΡΠ²Π°ΠΊΠΈ Π½ΠΎΠ²ΠΈ Π°Π»Π°Ρ, ΡΠ²Π΅ΠΊ ΡΠ°ΠΌ ΠΆΠ΅Π»Π΅ΠΎ Π΄Π° Π³Π° ΠΈΡΠΏΡΠΎΠ±Π°ΠΌ Π½Π΅ ΡΠ°ΠΌΠΎ Π½Π° Π»ΠΎΠΊΠ°Π»Π½ΠΎΡ ΠΌΠ°ΡΠΈΠ½ΠΈ, Π²Π΅Ρ ΠΈΡ ΡΠ΅Π°Π»Π½ΠΈΡΠΈΠΌ ΡΡΠ»ΠΎΠ²ΠΈΠΌΠ°. ΠΠ±ΠΎΠ³ ΡΠΎΠ³Π° ΡΠ°ΠΌ ΠΎΠ΄Π»ΡΡΠΈΠΎ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΠΌ ΠΏΠΎΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΡΠ΅Π½Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ½Ρ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ, ΠΊΠΎΡΠ° ΡΠ΅ ΠΊΠ°ΡΠ½ΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ βΠΏΠΎΠΊΡΠΈΡΠΈβ ΡΠ²ΠΈΠΌ Π²ΡΡΡΠ°ΠΌΠ° Π·Π°Π½ΠΈΠΌΡΠΈΠ²ΠΈΡ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ°. ΠΠ»Π°Π²Π½ΠΈ Π·Π°Ρ ΡΠ΅Π² Π·Π° ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ ΡΠ΅ ΡΠ΅Π³ΠΎΠ²Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½Π° Π±Π»ΠΈΠ·ΠΈΠ½Π° ΡΡΠ²Π°ΡΠ½ΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌΡ.
Π£ ΠΏΠΎΡΠ΅ΡΠΊΡ ΡΠ°ΠΌ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΏΡΠΎΡΠ΅ΠΊΡΠ° ΡΠ°Π·Π±ΠΈΠΎ Ρ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΊΠΎΡΠ°ΠΊΠ°:
-
ΠΠ°ΠΏΡΠ°Π²ΠΈΡΠ΅ Π΄Π²Π΅ ΡΡΠ»ΡΠ³Π΅ - 'Π±Π°ΡΠΊΠ΅Π½Π΄' (Π±Π°ΡΠΊΠ΅Π½Π΄) ΠΈ 'Π³Π°ΡΠ΅Π²Π°ΠΈ' ββ(Π³Π°ΡΠ΅Π²Π°ΠΈ), ΡΠΏΠ°ΠΊΡΡΡΠ΅ ΠΈΡ Ρ Π΄ΠΎΡΠΊΠ΅Ρ ΡΠ»ΠΈΠΊΠ΅ ΠΈ ΠΏΠΎΠ΄Π΅ΡΠΈΡΠ΅ ΠΈΡ Π΄Π° ΡΠ°Π΄Π΅ Π·Π°ΡΠ΅Π΄Π½ΠΎ
ΠΡΡΡΠ½Π΅ ΡΠ΅ΡΠΈ: ΠΠ°Π²Π° 11, Π‘ΠΏΡΠΈΠ½Π³ ΠΠΎΠΎΡ, ΠΠΎΡΠΊΠ΅Ρ, ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡΠ° ΡΠ»ΠΈΠΊΠ΅
-
ΠΡΡΡΠ½Π΅ ΡΠ΅ΡΠΈ: ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ, ΠΠΠ, ΡΠΏΡΠ°Π²ΡΠ°ΡΠ΅ ΡΠ΅ΡΡΡΡΠΈΠΌΠ°, Π°ΡΡΠΎΡΠΊΠ°Π»ΠΈΡΠ°ΡΠ΅, ΡΠ°ΡΠ½Π΅
-
ΠΡΠ΅ΠΈΡΠ°ΡΠ΅ Π³ΡΠ°ΡΠΈΠΊΠΎΠ½Π° ΡΠ° Π₯Π΅Π»ΠΌ 3 Π·Π° Π±ΠΎΡΠ΅ ΡΠΏΡΠ°Π²ΡΠ°ΡΠ΅ ΠΊΠ»Π°ΡΡΠ΅ΡΠΈΠΌΠ°
ΠΠ·Π½Π°ΠΊΠ΅: Π₯Π΅Π»ΠΌ 3, ΡΠ°ΡΠΏΠΎΡΠ΅ΡΠΈΠ²Π°ΡΠ΅ Π³ΡΠ°ΡΠΈΠΊΠΎΠ½Π°
-
ΠΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ΅ ΠΠ΅Π½ΠΊΠΈΠ½ΡΠ° ΠΈ ΡΠ΅Π²ΠΎΠ²ΠΎΠ΄Π° Π·Π° Π°ΡΡΠΎΠΌΠ°ΡΡΠΊΡ ΠΈΡΠΏΠΎΡΡΠΊΡ ΠΊΠΎΠ΄Π° Ρ ΠΊΠ»Π°ΡΡΠ΅Ρ
ΠΡΡΡΠ½Π΅ ΡΠ΅ΡΠΈ: ΠΠ΅Π½ΠΊΠΈΠ½Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°, Π΄ΠΎΠ΄Π°ΡΠΈ, ΠΎΠ΄Π²ΠΎΡΠ΅Π½ΠΎ ΡΠΏΡΠ΅ΠΌΠΈΡΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ°
ΠΠ»Π°Π½ΠΈΡΠ°ΠΌ Π΄Π° ΡΠ²Π°ΠΊΠΎΠΌ ΠΊΠΎΡΠ°ΠΊΡ ΠΏΠΎΡΠ²Π΅ΡΠΈΠΌ ΠΏΠΎΡΠ΅Π±Π°Π½ ΡΠ»Π°Π½Π°ΠΊ.
Π€ΠΎΠΊΡΡ ΠΎΠ²Π΅ ΡΠ΅ΡΠΈΡΠ΅ ΡΠ»Π°Π½Π°ΠΊΠ° Π½ΠΈΡΠ΅ ΠΊΠ°ΠΊΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΠΈ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ΅, Π²Π΅Ρ ΠΊΠ°ΠΊΠΎ ΠΈΡ Π½Π°ΡΠ΅ΡΠ°ΡΠΈ Π΄Π° ΡΠ°Π΄Π΅ Ρ ΡΠ΅Π΄Π½ΠΎΠΌ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΠ°ΠΊΠΎ ΡΡ ΡΠ²Π΅ ΠΎΠ²Π΅ ΡΡΠ²Π°ΡΠΈ ΠΎΠ±ΠΈΡΠ½ΠΎ Π²Π°Π½ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ΅ΡΠ°, ΠΌΠΈΡΠ»ΠΈΠΌ Π΄Π° ΡΠ΅ ΠΈΠΏΠ°ΠΊ ΠΊΠΎΡΠΈΡΠ½ΠΎ Π±ΠΈΡΠΈ ΡΠΏΠΎΠ·Π½Π°Ρ ΡΠ° ΡΠΈΠΌΠ° Π±Π°ΡΠ΅ΠΌ 20% (ΡΡΠΎ, ΠΊΠ°ΠΎ ΡΡΠΎ Π·Π½Π°ΡΠ΅, Π΄Π°ΡΠ΅ 80% ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°). ΠΠ΅ΠΊΠ΅ Π±Π΅Π·ΡΡΠ»ΠΎΠ²Π½ΠΎ Π²Π°ΠΆΠ½Π΅ ΡΠ΅ΠΌΠ΅, ΠΏΠΎΠΏΡΡ Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΡΠΈ, Π±ΠΈΡΠ΅ ΠΈΠ·ΠΎΡΡΠ°Π²ΡΠ΅Π½Π΅ ΠΈΠ· ΠΎΠ²ΠΎΠ³ ΠΏΡΠΎΡΠ΅ΠΊΡΠ°, ΡΠ΅Ρ Π°ΡΡΠΎΡ ΠΌΠ°Π»ΠΎ ΡΠ°Π·ΡΠΌΠ΅ Π΄Π° ΡΠ΅ ΠΎΠ²Π°Ρ ΡΠΈΡΡΠ΅ΠΌ ΠΊΡΠ΅ΠΈΡΠ°Π½ ΠΈΡΠΊΡΡΡΠΈΠ²ΠΎ Π·Π° Π»ΠΈΡΠ½Ρ ΡΠΏΠΎΡΡΠ΅Π±Ρ. ΠΠΎΠ·Π΄ΡΠ°Π²ΡΠ°ΠΌ ΡΠ²Π°ΠΊΠΎ ΠΌΠΈΡΡΠ΅ΡΠ΅ ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠ²Π½Ρ ΠΊΡΠΈΡΠΈΠΊΡ.
ΠΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°
Π£ΡΠ»ΡΠ³Π΅ ΡΡ Π½Π°ΠΏΠΈΡΠ°Π½Π΅ Ρ ΠΠ°Π²ΠΈ 11 ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ Π‘ΠΏΡΠΈΠ½Π³ ΠΠΎΠΎΡ. ΠΠ½ΡΠ΅ΡΡΠ΅ΡΠ²ΠΈΡΠ½Π° ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΡΠ° ΡΠ΅ ΠΎΡΠ³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½Π° ΠΏΠΎΠΌΠΎΡΡ Π ΠΠ‘Π’-Π°. ΠΡΠΎΡΠ΅ΠΊΠ°Ρ ΡΠ΅ ΡΠΊΡΡΡΠΈΠ²Π°ΡΠΈ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π°Π½ Π±ΡΠΎΡ ΡΠ΅ΡΡΠΎΠ²Π° (ΠΊΠ°ΠΊΠΎ Π±ΠΈ ΠΊΠ°ΡΠ½ΠΈΡΠ΅ Π±ΠΈΠ»ΠΎ ΡΡΠ° Π΄Π° ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠ° Ρ ΠΠ΅Π½ΠΊΠΈΠ½ΡΡ). ΠΠ·Π²ΠΎΡΠ½ΠΈ ΠΊΠΎΠ΄ Π·Π° ΡΡΠ»ΡΠ³Π΅ ΡΠ΅ Π΄ΠΎΡΡΡΠΏΠ°Π½ Π½Π° ΠΠΈΡΠ₯ΡΠ±-Ρ:
ΠΠ° Π±ΠΈΡΡΠ΅ ΠΌΠΎΠ³Π»ΠΈ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΡΠ΅ ΡΡΠ°ΡΡΡ ΡΠ²Π°ΠΊΠ΅ ΠΎΠ΄ ΡΡΠ»ΡΠ³Π°, ΡΠΈΡ ΠΎΠ²ΠΈΠΌ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈΠΌΠ° ΡΠ΅ Π΄ΠΎΠ΄Π°Ρ Π‘ΠΏΡΠΈΠ½Π³ ΠΡΡΡΠ°ΡΠΎΡ. Π’ΠΎ ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°ΡΠΈ /Π°ΡΡΡΠ°ΡΠΎΡ/Ρ Π΅Π°Π»ΡΡ ΠΊΡΠ°ΡΡΡ ΡΠ°ΡΠΊΡ ΠΈ Π²ΡΠ°ΡΠΈΡΠΈ ΡΡΠ°ΡΡΡ 200 Π°ΠΊΠΎ ΡΠ΅ ΡΡΠ»ΡΠ³Π° ΡΠΏΡΠ΅ΠΌΠ½Π° Π΄Π° ΠΏΡΠΈΡ Π²Π°ΡΠΈ ΡΠ°ΠΎΠ±ΡΠ°ΡΠ°Ρ, ΠΈΠ»ΠΈ 504 Π°ΠΊΠΎ ΠΏΠΎΡΡΠΎΡΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌ. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°ΡΡ, ΠΎΠ²ΠΎ ΡΠ΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠΈΠΊΡΠΈΠ²Π½Π° ΠΏΡΠΎΠ²Π΅ΡΠ°, ΠΏΠΎΡΡΠΎ ΡΡ ΡΡΠ»ΡΠ³Π΅ Π²Π΅ΠΎΠΌΠ° ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π΅, Π° Ρ ΡΠ»ΡΡΠ°ΡΡ Π²ΠΈΡΠ΅ ΡΠΈΠ»Π΅ Π²Π΅ΡΠ° ΡΠ΅ Π²Π΅ΡΠΎΠ²Π°ΡΠ½ΠΎΡΠ° Π΄Π° ΡΠ΅ ΠΏΠΎΡΡΠ°ΡΠΈ ΠΏΠΎΡΠΏΡΠ½ΠΎ Π½Π΅Π΄ΠΎΡΡΡΠΏΠ½Π΅ Π½Π΅Π³ΠΎ Π΄Π° ΠΎΡΡΠ°Π½Ρ Π΄Π΅Π»ΠΈΠΌΠΈΡΠ½ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½Π΅. ΠΠ»ΠΈ Ρ ΡΡΠ²Π°ΡΠ½ΠΈΠΌ ΡΠΈΡΡΠ΅ΠΌΠΈΠΌΠ°, ΠΡΡΡΠ°ΡΠΎΡ ΠΌΠΎΠΆΠ΅ ΠΏΠΎΠΌΠΎΡΠΈ Ρ Π΄ΠΈΡΠ°Π³Π½ΠΎΡΡΠΈΡΠΈΡΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΏΡΠ΅ Π½Π΅Π³ΠΎ ΡΡΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΈ ΠΏΠΎΡΠ½Ρ Π΄Π° ΡΠ΅ Π±ΠΎΡΠ΅ ΠΎΠΊΠΎ ΡΠ΅Π³Π°. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΠΏΠΎΡΡΠΎΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ ΡΠ° ΠΏΡΠΈΡΡΡΠΏΠΎΠΌ Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°, ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π°ΡΡΠΎΠΌΠ°ΡΡΠΊΠΈ Π΄Π° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠΈΠΌΠΎ Π½Π° ΠΎΠ²ΠΎ Π·Π°ΡΡΡΠ°Π²ΡΠ°ΡΠ΅ΠΌ ΠΎΠ±ΡΠ°Π΄Π΅ Π·Π°Ρ ΡΠ΅Π²Π° ΡΠ° ΠΏΠΎΠΊΠ²Π°ΡΠ΅Π½ΠΎΠΌ ΠΈΠ½ΡΡΠ°Π½ΡΠΎΠΌ ΡΡΠ»ΡΠ³Π΅.
ΠΠ°ΡΠΊΠ΅Π½Π΄ Π‘Π΅ΡΠ²ΠΈΡΠ΅
ΠΠΎΠ·Π°Π΄ΠΈΠ½ΡΠΊΠΈ ΡΠ΅ΡΠ²ΠΈΡ ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΏΡΠ΅Π±ΡΠΎΡΠ°ΡΠΈ ΠΈ Π²ΡΠ°ΡΠΈΡΠΈ Π±ΡΠΎΡ ΠΏΡΠΈΡ Π²Π°ΡΠ΅Π½ΠΈΡ Π·Π°Ρ ΡΠ΅Π²Π°.
ΠΠΎΠ΄ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΎΡΠ°:
@RestController
public class RequestsCounterController {
private final AtomicLong counter = new AtomicLong();
@GetMapping("/requests")
public Long getRequestsCount() {
return counter.incrementAndGet();
}
}
Π’Π΅ΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅ΡΠ°:
@WebMvcTest(RequestsCounterController.class)
public class RequestsCounterControllerTests {
@Autowired
private MockMvc mockMvc;
@Test
public void firstRequest_one() throws Exception {
mockMvc.perform(get("/requests"))
.andExpect(status().isOk())
.andExpect(MockMvcResultMatchers.content().string("1"));
}
}
Π‘Π΅ΡΠ²ΠΈΡΠ΅ ΠΠ°ΡΠ΅Π²Π°ΠΈ
ΠΡΠ΅ΠΆΠ½ΠΈ ΠΏΡΠΎΠ»Π°Π· ΡΠ΅ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΠΈ Π·Π°Ρ ΡΠ΅Π² ΠΏΠΎΠ·Π°Π΄ΠΈΠ½ΡΠΊΠΎΡ ΡΡΠ»ΡΠ·ΠΈ, Π΄ΠΎΠΏΡΠ½ΠΈΠ²ΡΠΈ Π³Π° ΡΠ»Π΅Π΄Π΅ΡΠΈΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°ΠΌΠ°:
- Π³Π°ΡΠ΅Π²Π°ΠΈ ΠΈΠ΄. ΠΠΎΡΡΠ΅Π±Π°Π½ ΡΠ΅ Π΄Π° Π±ΠΈ Π±ΠΈΠ»ΠΎ ΠΌΠΎΠ³ΡΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΠΎΠ²Π°ΡΠΈ ΡΠ΅Π΄Π½Ρ ΠΈΠ½ΡΡΠ°Π½ΡΡ ΠΌΡΠ΅ΠΆΠ½ΠΎΠ³ ΠΏΡΠΎΠ»Π°Π·Π° ΠΎΠ΄ Π΄ΡΡΠ³Π΅ ΠΏΠΎ ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ°
- ΠΠ΅ΠΊΠ° "ΡΠ°ΡΠ½Π°" ΠΊΠΎΡΠ° ΡΠ΅ ΠΈΠ³ΡΠ°ΡΠΈ ΡΠ»ΠΎΠ³Ρ Π²Π΅ΠΎΠΌΠ° Π²Π°ΠΆΠ½Π΅ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ΅ (Π±ΡΠΎΡ ΠΊΡΡΡΠ° Π·Π° ΡΠΈΡΡΠΎΠ²Π°ΡΠ΅ Π²Π°ΠΆΠ½ΠΎΠ³ ΠΊΠΎΠ»Π°ΡΠΈΡΠ°)
ΠΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΠ° Ρ Π°ΠΏΠΏΠ»ΠΈΡΠ°ΡΠΈΠΎΠ½.ΠΏΡΠΎΠΏΠ΅ΡΡΠΈΠ΅Ρ:
backend.url=http://localhost:8081
instance.id=${random.int}
secret="default-secret"
ΠΠ°ΡΠΊΠ΅Π½Π΄ Π°Π΄Π°ΠΏΡΠ΅Ρ:
@Service
public class BackendAdapter {
private static final String REQUESTS_ENDPOINT = "/requests";
private final RestTemplate restTemplate;
@Value("${backend.url}")
private String backendUrl;
public BackendAdapter(RestTemplateBuilder builder) {
restTemplate = builder.build();
}
public String getRequests() {
ResponseEntity<String> response = restTemplate.getForEntity(
backendUrl + REQUESTS_ENDPOINT, String.class);
return response.getBody();
}
}
ΠΠΎΠ½ΡΡΠΎΠ»ΠΎΡ:
@RestController
@RequiredArgsConstructor
public class EndpointController {
private final BackendAdapter backendAdapter;
@Value("${instance.id}")
private int instanceId;
@Value("${secret}")
private String secret;
@GetMapping("/")
public String getRequestsCount() {
return String.format("Number of requests %s (gateway %d, secret %s)", backendAdapter.getRequests(), instanceId, secret);
}
}
ΠΠ°Π½ΡΠΈΡΠ°ΡΠ΅:
ΠΠΎΠΊΡΠ΅ΡΠ΅ΠΌΠΎ Π±Π°ΡΠΊΠ΅Π½Π΄:
./mvnw package -DskipTests
java -Dserver.port=8081 -jar target/microservices-backend-1.0.0.jar
ΠΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ ΠΊΠ°ΠΏΠΈΡΠ΅:
./mvnw package -DskipTests
java -jar target/microservices-gateway-1.0.0.jar
ΠΡΠΎΠ²Π΅ΡΠ°Π²Π°ΠΌΠΎ:
$ curl http://localhost:8080/
Number of requests 1 (gateway 38560358, secret "default-secret")
Π‘Π²Π΅ ΡΠ°Π΄ΠΈ. ΠΠ°ΠΆΡΠΈΠ²ΠΈ ΡΠΈΡΠ°Π»Π°Ρ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΈΡΠΈ Π΄Π° Π½Π°Ρ Π½ΠΈΡΡΠ° Π½Π΅ ΡΠΏΡΠ΅ΡΠ°Π²Π° Π΄Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ ΠΏΡΠΈΡΡΡΠΏΠΈΠΌΠΎ Π±Π°ΡΠΊΠ΅Π½Π΄-Ρ, Π·Π°ΠΎΠ±ΠΈΠ»Π°Π·Π΅ΡΠΈ Π³Π°ΡΠ΅Π²Π°ΠΈ (
Π’Π°ΠΊΠΎΡΠ΅, ΠΎΠ±Π΅ ΡΡΠ»ΡΠ³Π΅ Π΄Π΅Π»Π΅ ΡΠ΅Π΄Π°Π½ ΡΠΈΡΡΠ΅ΠΌ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄Π΅ ΡΡΡΠΈΠΌΠΎΠ²Π΅ ΠΈ Ρ ΡΠ΅Π΄Π½ΠΎΠΌ ΡΡΠ΅Π½ΡΡΠΊΡ ΠΌΠΎΠ³Ρ Π΄Π° ΠΏΠΎΡΠ½Ρ Π΄Π° ΠΎΠΌΠ΅ΡΠ°ΡΡ ΡΠ΅Π΄Π½Π° Π΄ΡΡΠ³Ρ. ΠΠΈΠ»ΠΎ Π±ΠΈ Π»Π΅ΠΏΠΎ Π΄Π° ΠΈΠ·ΠΎΠ»ΡΡΠ΅ΠΌΠΎ Π½Π°ΡΠ΅ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ΅. ΠΠ²ΠΎ ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΠΏΠΎΡΡΠΈΡΠΈ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠΎΠΌ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π½Π° ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΠΌ ΠΌΠ°ΡΠΈΠ½Π°ΠΌΠ° (ΠΏΡΠ½ΠΎ Π½ΠΎΠ²ΡΠ°, ΡΠ΅ΡΠΊΠΎ), ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΠΌ Π²ΠΈΡΡΡΠ΅Π»Π½ΠΈΡ
ΠΌΠ°ΡΠΈΠ½Π° (ΠΈΠ½ΡΠ΅Π½Π·ΠΈΠ²Π½Π΅ ΡΠ΅ΡΡΡΡΠ΅, Π΄ΡΠ³ΠΎ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅) ΠΈΠ»ΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ΠΌ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΈΠ·Π°ΡΠΈΡΠ΅. ΠΠ°ΠΎ ΡΡΠΎ ΡΠ΅ ΠΈ ΠΎΡΠ΅ΠΊΠΈΠ²Π°Π»ΠΎ, Π±ΠΈΡΠ°ΠΌΠΎ ΡΡΠ΅ΡΡ ΠΎΠΏΡΠΈΡΡ ΠΈ
Π»ΡΡΠΊΠΈ ΡΠ°Π΄Π½ΠΈΠΊ
Π£ΠΊΡΠ°ΡΠΊΠΎ, Π΄ΠΎΡΠΊΠ΅Ρ ΠΊΡΠ΅ΠΈΡΠ° ΠΈΠ·ΠΎΠ»ΠΎΠ²Π°Π½Π΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅, ΡΠ΅Π΄Π°Π½ ΠΏΠΎ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠΈ. ΠΠ° Π±ΠΈΡΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΠ»ΠΈ Π΄ΠΎΡΠΊΠ΅Ρ, ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΡΠ΅ ΠΠΎΡΠΊΠ΅ΡΡΠΈΠ»Π΅ - ΡΠΏΡΡΡΡΠ²Π° Π·Π° ΠΏΡΠ°Π²ΡΠ΅ΡΠ΅ ΠΈ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅. ΠΠ°ΡΠΈΠΌ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ»ΠΈΠΊΡ, Π΄Π° ΡΠ΅ ΠΎΡΠΏΡΠ΅ΠΌΠΈΡΠ΅ Ρ ΡΠ΅Π³ΠΈΡΡΠ°Ρ ΡΠ»ΠΈΠΊΠ° (Π±Ρ.
ΠΠΎΡΠΊΠ΅ΡΡΠΈΠ»Π΅
ΠΠ΅Π΄Π½Π° ΠΎΠ΄ Π½Π°ΡΠ²Π°ΠΆΠ½ΠΈΡΠΈΡ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ° ΡΠ»ΠΈΠΊΠ΅ ΡΠ΅ ΡΠ΅Π½Π° Π²Π΅Π»ΠΈΡΠΈΠ½Π°. ΠΠΎΠΌΠΏΠ°ΠΊΡΠ½Π° ΡΠ»ΠΈΠΊΠ° ΡΠ΅ ΡΠ΅ ΠΏΡΠ΅ΡΠ·Π΅ΡΠΈ Π±ΡΠΆΠ΅ ΠΈΠ· ΡΠ΄Π°ΡΠ΅Π½ΠΎΠ³ ΡΠΏΡΠ΅ΠΌΠΈΡΡΠ°, Π·Π°ΡΠ·ΠΈΠΌΠ°ΡΠΈ ΠΌΠ°ΡΠ΅ ΠΏΡΠΎΡΡΠΎΡΠ° ΠΈ Π²Π°ΡΠ° ΡΡΠ»ΡΠ³Π° ΡΠ΅ ΠΏΠΎΡΠ΅ΡΠΈ Π±ΡΠΆΠ΅. ΠΠΈΠ»ΠΎ ΠΊΠΎΡΠ° ΡΠ»ΠΈΠΊΠ° ΡΠ΅ ΠΈΠ·Π³ΡΠ°ΡΠ΅Π½Π° Π½Π° ΠΎΡΠ½ΠΎΠ²Ρ ΠΎΡΠ½ΠΎΠ²Π½Π΅ ΡΠ»ΠΈΠΊΠ΅, Π° ΠΏΡΠ΅ΠΏΠΎΡΡΡΡΡΠ΅ ΡΠ΅ Π΄Π° ΠΈΠ·Π°Π±Π΅ΡΠ΅ΡΠ΅ Π½Π°ΡΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΠΈΡΡΠΈΡΠ½ΠΈΡΡ ΠΎΠΏΡΠΈΡΡ. ΠΠΎΠ±ΡΠ° ΠΎΠΏΡΠΈΡΠ° ΡΠ΅ ΠΠ»ΠΏΠΈΠ½Π΅, ΠΊΠΎΠΌΠΏΠ»Π΅ΡΠ½Π° ΠΠΈΠ½ΡΠΊ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡΠ° ΡΠ° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΈΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΈΠΌΠ°.
ΠΡΠ²ΠΎ, ΠΏΠΎΠΊΡΡΠ°ΡΠΌΠΎ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌΠΎ ΠΠΎΡΠΊΠ΅ΡΡΠΈΠ»Π΅ "Π½Π° ΡΠ΅Π»ΠΎ" (ΠΎΠ΄ΠΌΠ°Ρ ΡΡ ΡΠ΅ΡΠΈ Π΄Π° ΡΠ΅ ΠΎΠ²ΠΎ Π»ΠΎΡ Π½Π°ΡΠΈΠ½, Π½Π΅ΠΌΠΎΡΡΠ΅ ΡΠΎ ΡΠ°Π΄ΠΈΡΠΈ):
FROM adoptopenjdk/openjdk11:jdk-11.0.5_10-alpine
ADD . /src
WORKDIR /src
RUN ./mvnw package -DskipTests
EXPOSE 8080
ENTRYPOINT ["java","-jar","target/microservices-gateway-1.0.0.jar"]
ΠΠ²Π΄Π΅ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ ΠΎΡΠ½ΠΎΠ²Π½Ρ ΡΠ»ΠΈΠΊΡ Π±Π°Π·ΠΈΡΠ°Π½Ρ Π½Π° ΠΠ»ΠΏΠΈΠ½Π΅-Ρ ΡΠ° Π²Π΅Ρ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Π½ΠΈΠΌ ΠΠΠ-ΠΎΠΌ Π·Π° ΠΈΠ·Π³ΡΠ°Π΄ΡΡ Π½Π°ΡΠ΅Π³ ΠΏΡΠΎΡΠ΅ΠΊΡΠ°. ΠΠΎΠΌΠ°Π½Π΄ΠΎΠΌ ΠΠΠ Π΄ΠΎΠ΄Π°ΡΠ΅ΠΌΠΎ ΡΡΠ΅Π½ΡΡΠ½ΠΈ ΡΡΡ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡΡΠΌ Π½Π° ΡΠ»ΠΈΠΊΡ, ΠΎΠ·Π½Π°ΡΠ°Π²Π°ΠΌΠΎ Π³Π° ΠΊΠ°ΠΎ ΡΠ°Π΄Π½ΠΈ (ΠΠΠ ΠΠΠΠ ) ΠΈ Π·Π°ΠΏΠΎΡΠΈΡΠ΅ΠΌΠΎ ΠΏΡΠ°Π²ΡΠ΅ΡΠ΅. ΠΠΎΠΌΠ°Π½Π΄Π° ΠΠΠ‘ΠΠΠ‘Π 8080 ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠ° Π΄ΠΎΡΠΊΠ΅Ρ-Ρ Π΄Π° ΡΠ΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΡ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΡΠ²ΠΎΡ ΠΏΠΎΡΡ 8080 (ΠΎΠ²ΠΎ Π½Π΅ΡΠ΅ ΡΡΠΈΠ½ΠΈΡΠΈ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΠΎΠΌ ΡΠΏΠΎΡΠ°, Π°Π»ΠΈ ΡΠ΅ ΠΎΠΌΠΎΠ³ΡΡΠΈΡΠΈ ΠΏΡΠΈΡΡΡΠΏ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠΈ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° Π½Π° ΠΈΡΡΠΎΡ ΠΌΡΠ΅ΠΆΠΈ Π΄ΠΎΡΠΊΠ΅Ρ-Π° ).
ΠΠ° Π±ΠΈΡΡΠ΅ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π»ΠΈ ΡΡΠ»ΡΠ³Π΅ Ρ ΡΠ»ΠΈΠΊΠ΅, ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ΅ Π΄Π° ΠΏΠΎΠΊΡΠ΅Π½Π΅ΡΠ΅ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΈΠ· ΠΊΠΎΡΠ΅Π½Π° ΡΠ²Π°ΠΊΠΎΠ³ ΠΏΡΠΎΡΠ΅ΠΊΡΠ°:
docker image build . -t msvc-backend:1.0.0
Π Π΅Π·ΡΠ»ΡΠ°Ρ ΡΠ΅ ΡΠ»ΠΈΠΊΠ° ΠΎΠ΄ 456 ΠΠ (ΠΎΠ΄ ΡΠ΅Π³Π° ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½Π° ΠΠΠ ΡΠ»ΠΈΠΊΠ° Π·Π°ΡΠ·ΠΈΠΌΠ°Π»Π° 340 ΠΠ). Π ΡΠ²Π΅ ΡΠΎ ΡΠΏΡΠΊΠΎΡ ΡΠΈΡΠ΅Π½ΠΈΡΠΈ Π΄Π° ΡΠ΅ ΡΠ°ΡΠΎΠ²ΠΈ Ρ Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΠΊΡΡ ΠΌΠΎΠ³Ρ ΠΈΠ·Π±ΡΠΎΡΠ°ΡΠΈ Π½Π° ΠΏΡΡΡ. ΠΠ° Π±ΠΈΡΡΠ΅ ΡΠΌΠ°ΡΠΈΠ»ΠΈ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ Π½Π°ΡΠ΅ ΡΠ»ΠΈΠΊΠ΅:
- ΠΠΎΡΠΈΡΡΠΈΠΌΠΎ ΠΌΠΎΠ½ΡΠ°ΠΆΡ Ρ Π²ΠΈΡΠ΅ ΠΊΠΎΡΠ°ΠΊΠ°. Π£ ΠΏΡΠ²ΠΎΠΌ ΠΊΠΎΡΠ°ΠΊΡ ΡΠ΅ΠΌΠΎ ΠΈΠ·Π³ΡΠ°Π΄ΠΈΡΠΈ ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ, Ρ Π΄ΡΡΠ³ΠΎΠΌ ΡΠ΅ΠΌΠΎ ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°ΡΠΈ ΠΠ Π, Π°Ρ ΡΡΠ΅ΡΠ΅ΠΌ ΠΊΠΎΡΠ°ΠΊΡ ΡΠ΅ΠΌΠΎ ΡΠ²Π΅ ΡΠΎ ΠΊΠΎΠΏΠΈΡΠ°ΡΠΈ Ρ Π½ΠΎΠ²Ρ ΡΠΈΡΡΡ ΠΠ»ΠΏΠΈΠ½Π΅ ΡΠ»ΠΈΠΊΡ. Π£ΠΊΡΠΏΠ½ΠΎ, ΡΠ°ΠΌΠΎ ΠΏΠΎΡΡΠ΅Π±Π½Π΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠ΅ ΡΠ΅ Π±ΠΈΡΠΈ Π½Π° ΠΊΠΎΠ½Π°ΡΠ½ΠΎΡ ΡΠ»ΠΈΡΠΈ.
- Π₯Π°ΡΠ΄Π΅ Π΄Π° ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ ΠΌΠΎΠ΄ΡΠ»Π°ΡΠΈΠ·Π°ΡΠΈΡΡ ΡΠ°Π²Π°. ΠΠΎΡΠ΅Π²ΡΠΈ ΠΎΠ΄ ΠΠ°Π²Π΅ 9, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ Π°Π»Π°ΡΠΊΡ ΡΠ»ΠΈΠ½ΠΊ Π΄Π° ΠΊΡΠ΅ΠΈΡΠ°ΡΠ΅ ΠΠ Π ΡΠ°ΠΌΠΎ ΠΎΠ΄ ΠΌΠΎΠ΄ΡΠ»Π° ΠΊΠΎΡΠΈ ΡΡ Π²Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ
ΠΠ° ΡΠ°Π΄ΠΎΠ·Π½Π°Π»Π΅, Π΅Π²ΠΎ Π΄ΠΎΠ±ΡΠΎΠ³ ΡΠ»Π°Π½ΠΊΠ° ΠΎ ΠΏΡΠΈΡΡΡΠΏΠΈΠΌΠ° ΡΠΌΠ°ΡΠ΅ΡΠ° ΡΠ»ΠΈΠΊΠ΅.
ΠΠΎΠ½Π°ΡΠ½ΠΈ ΠΠΎΡΠΊΠ΅ΡΡΠΈΠ»Π΅:
FROM adoptopenjdk/openjdk11:jdk-11.0.5_10-alpine as builder
ADD . /src
WORKDIR /src
RUN ./mvnw package -DskipTests
FROM alpine:3.10.3 as packager
RUN apk --no-cache add openjdk11-jdk openjdk11-jmods
ENV JAVA_MINIMAL="/opt/java-minimal"
RUN /usr/lib/jvm/java-11-openjdk/bin/jlink
--verbose
--add-modules
java.base,java.sql,java.naming,java.desktop,java.management,java.security.jgss,java.instrument
--compress 2 --strip-debug --no-header-files --no-man-pages
--release-info="add:IMPLEMENTOR=radistao:IMPLEMENTOR_VERSION=radistao_JRE"
--output "$JAVA_MINIMAL"
FROM alpine:3.10.3
LABEL maintainer="Anton Shelenkov [email protected]"
ENV JAVA_HOME=/opt/java-minimal
ENV PATH="$PATH:$JAVA_HOME/bin"
COPY --from=packager "$JAVA_HOME" "$JAVA_HOME"
COPY --from=builder /src/target/microservices-backend-*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
ΠΠΎΠ½ΠΎΠ²ΠΎ ΠΊΡΠ΅ΠΈΡΠ°ΠΌΠΎ ΡΠ»ΠΈΠΊΡ ΠΈ ΠΊΠ°ΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΠΎΠ³Π°, ΠΎΠ½Π° ΡΠ΅ ΠΈΠ·Π³ΡΠ±ΠΈΠ»Π° 6 ΠΏΡΡΠ° ΡΠ²ΠΎΡΡ ΡΠ΅ΠΆΠΈΠ½Ρ ΠΈ ΠΈΠ·Π½ΠΎΡΠΈΠ»Π° ΡΠ΅ 77 ΠΠ. ΠΠΈΡΠ΅ Π»ΠΎΡΠ΅. ΠΠ°ΠΊΠΎΠ½ ΡΠΎΠ³Π°, Π³ΠΎΡΠΎΠ²Π΅ ΡΠ»ΠΈΠΊΠ΅ ΡΠ΅ ΠΌΠΎΠ³Ρ ΡΡΠΈΡΠ°ΡΠΈ Ρ ΡΠ΅Π³ΠΈΡΡΠ°Ρ ΡΠ»ΠΈΠΊΠ° ΠΊΠ°ΠΊΠΎ Π±ΠΈ Π²Π°ΡΠ΅ ΡΠ»ΠΈΠΊΠ΅ Π±ΠΈΠ»Π΅ Π΄ΠΎΡΡΡΠΏΠ½Π΅ Π·Π° ΠΏΡΠ΅ΡΠ·ΠΈΠΌΠ°ΡΠ΅ ΡΠ° ΠΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°.
ΠΠ°ΡΠ΅Π΄Π½ΠΈΡΠΊΠΎ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ ΡΡΠ»ΡΠ³Π° Ρ ΠΠΎΡΠΊΠ΅Ρ-Ρ
ΠΠ° ΠΏΠΎΡΠ΅ΡΠ°ΠΊ, Π½Π°ΡΠ΅ ΡΡΠ»ΡΠ³Π΅ ΠΌΠΎΡΠ°ΡΡ Π±ΠΈΡΠΈ Π½Π° ΠΈΡΡΠΎΡ ΠΌΡΠ΅ΠΆΠΈ. ΠΠΎΡΡΠΎΡΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΠΈΠΏΠΎΠ²Π° ΠΌΡΠ΅ΠΆΠ° Ρ ΠΠΎΡΠΊΠ΅Ρ-Ρ, Π° ΠΌΠΈ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ Π½Π°ΡΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΈΡΡ ΠΎΠ΄ ΡΠΈΡ - Π±ΡΠΈΠ΄Π³Π΅, ΠΊΠΎΡΠΈ Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π΄Π° ΡΠΌΡΠ΅ΠΆΠΈΡΠ΅ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅ ΠΊΠΎΡΠΈ ΡΠ°Π΄Π΅ Π½Π° ΠΈΡΡΠΎΠΌ Ρ ΠΎΡΡΡ. ΠΠ°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΠΌΡΠ΅ΠΆΡ ΡΠ° ΡΠ»Π΅Π΄Π΅ΡΠΎΠΌ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΌ:
docker network create msvc-network
ΠΠ°ΡΠΈΠΌ ΠΏΠΎΠΊΡΠ΅Π½ΠΈΡΠ΅ ΠΏΠΎΠ·Π°Π΄ΠΈΠ½ΡΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅Ρ ΠΏΠΎΠ΄ Π½Π°Π·ΠΈΠ²ΠΎΠΌ 'Π±Π°ΡΠΊΠ΅Π½Π΄' ΡΠ° ΡΠ»ΠΈΠΊΠΎΠΌ ΠΌΠΈΡΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ΅Ρ-Π±Π°ΡΠΊΠ΅Π½Π΄:1.0.0:
docker run -dit --name backend --network msvc-net microservices-backend:1.0.0
ΠΡΠ΅Π΄ΠΈ Π½Π°ΠΏΠΎΠΌΠ΅Π½ΡΡΠΈ Π΄Π° ΠΌΡΠ΅ΠΆΠ° ΠΌΠΎΡΡΠΎΠ²Π° ΠΎΠ±Π΅Π·Π±Π΅ΡΡΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½Ρ ΡΡΠ»ΡΠ³Ρ ΠΎΡΠΊΡΠΈΠ²Π°ΡΠ° ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ° ΠΏΠΎ ΡΠΈΡ
ΠΎΠ²ΠΈΠΌ ΠΈΠΌΠ΅Π½ΠΈΠΌΠ°. Π’ΠΎ ΡΠ΅ΡΡ, ΠΏΠΎΠ·Π°Π΄ΠΈΠ½ΡΠΊΠ° ΡΡΠ»ΡΠ³Π° ΡΠ΅ Π±ΠΈΡΠΈ Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΠ½ΡΡΠ°Ρ Π΄ΠΎΡΠΊΠ΅Ρ ΠΌΡΠ΅ΠΆΠ΅ Π½Π° Π°Π΄ΡΠ΅ΡΠΈ
ΠΠΎΠΊΡΠ΅ΡΠ°ΡΠ΅ ΠΊΠ°ΠΏΠΈΡΠ΅:
docker run -dit -p 80:8080 --env secret=my-real-secret --env BACKEND_URL=http://backend:8080/ --name gateway --network msvc-net microservices-gateway:1.0.0
Π£ ΠΎΠ²ΠΎΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ ΡΠΊΠ°Π·ΡΡΠ΅ΠΌΠΎ Π΄Π° ΠΏΡΠΎΡΠ»Π΅ΡΡΡΠ΅ΠΌΠΎ ΠΏΠΎΡΡ 80 Π½Π°ΡΠ΅Π³ Ρ ΠΎΡΡΠ° Π½Π° ΠΏΠΎΡΡ 8080 ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ°. ΠΠΎΡΠΈΡΡΠΈΠΌΠΎ ΠΎΠΏΡΠΈΡΠ΅ Π΅Π½Π² Π΄Π° Π±ΠΈΡΠΌΠΎ ΠΏΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Π΅ ΠΎΠΊΡΡΠΆΠ΅ΡΠ° ΠΊΠΎΡΠ΅ ΡΠ΅ Π°ΡΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΡΠΈΡΠ°ΡΠΈ ΡΠΏΡΠΈΠ½Π³ ΠΈ Π·Π°ΠΌΠ΅Π½ΠΈΡΠΈ ΡΠ²ΠΎΡΡΡΠ²Π° ΠΈΠ· Π°ΠΏΠΏΠ»ΠΈΡΠ°ΡΠΈΠΎΠ½.ΠΏΡΠΎΠΏΠ΅ΡΡΠΈΠ΅Ρ.
ΠΠ°ΠΊΠΎΠ½ ΠΏΠΎΡΠ΅ΡΠΊΠ°, Π·ΠΎΠ²Π΅ΠΌΠΎ
ΠΠ°ΠΊΡΡΡΠ°ΠΊ
ΠΠ°ΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΠΎΠ³Π°, Π½Π°ΠΏΡΠ°Π²ΠΈΠ»ΠΈ ΡΠΌΠΎ Π΄Π²Π° ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½Π° ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ°, ΡΠΏΠ°ΠΊΠΎΠ²Π°Π»ΠΈ ΠΈΡ Ρ Π΄ΠΎΡΠΊΠ΅Ρ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠ΅ ΠΈ Π·Π°ΡΠ΅Π΄Π½ΠΎ ΠΈΡ ΠΏΠΎΠΊΡΠ΅Π½ΡΠ»ΠΈ Π½Π° ΠΈΡΡΠΎΡ ΠΌΠ°ΡΠΈΠ½ΠΈ. ΠΠ΅ΡΡΡΠΈΠΌ, Π΄ΠΎΠ±ΠΈΡΠ΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌ ΠΈΠΌΠ° Π½ΠΈΠ· Π½Π΅Π΄ΠΎΡΡΠ°ΡΠ°ΠΊΠ°:
- Π‘Π»Π°Π±Π° ΡΠΎΠ»Π΅ΡΠ°Π½ΡΠΈΡΠ° Π³ΡΠ΅ΡΠ°ΠΊΠ° - ΡΠ²Π΅ ΡΠ°Π΄ΠΈ Π·Π° Π½Π°Ρ Π½Π° ΡΠ΅Π΄Π½ΠΎΠΌ ΡΠ΅ΡΠ²Π΅ΡΡ
- ΠΠΎΡΠ° ΡΠΊΠ°Π»Π°Π±ΠΈΠ»Π½ΠΎΡΡ - ΠΊΠ°Π΄Π° ΡΠ΅ ΠΎΠΏΡΠ΅ΡΠ΅ΡΠ΅ΡΠ΅ ΠΏΠΎΠ²Π΅ΡΠ°, Π±ΠΈΠ»ΠΎ Π±ΠΈ Π»Π΅ΠΏΠΎ Π°ΡΡΠΎΠΌΠ°ΡΡΠΊΠΈ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠΈ Π΄ΠΎΠ΄Π°ΡΠ½Π΅ ΠΈΠ½ΡΡΠ°Π½ΡΠ΅ ΡΡΠ»ΡΠ³Π΅ ΠΈ Π±Π°Π»Π°Π½ΡΠΈΡΠ°ΡΠΈ ΠΎΠΏΡΠ΅ΡΠ΅ΡΠ΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅ΡΡ ΡΠΈΡ
- Π‘Π»ΠΎΠΆΠ΅Π½ΠΎΡΡ ΠΏΠΎΠΊΡΠ΅ΡΠ°ΡΠ° - ΠΌΠΎΡΠ°Π»ΠΈ ΡΠΌΠΎ Π΄Π° ΡΠ½Π΅ΡΠ΅ΠΌΠΎ Π½Π°ΡΠΌΠ°ΡΠ΅ 3 ΠΊΠΎΠΌΠ°Π½Π΄Π΅, ΠΈ ΡΠ° ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠΌΠ° (ΠΎΠ²ΠΎ ΡΠ΅ ΡΠ°ΠΌΠΎ Π·Π° 2 ΡΡΠ»ΡΠ³Π΅)
ΠΠ° Π±ΠΈΡΡΠ΅ ΡΠ΅ΡΠΈΠ»ΠΈ Π³ΠΎΡΠ΅ Π½Π°Π²Π΅Π΄Π΅Π½Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅, ΠΏΠΎΡΡΠΎΡΠΈ Π½ΠΈΠ· ΡΠ΅ΡΠ΅ΡΠ° ΠΊΠ°ΠΎ ΡΡΠΎ ΡΡ ΠΠΎΡΠΊΠ΅Ρ Π‘Π²Π°ΡΠΌ, ΠΠΎΠΌΠ°Π΄, ΠΡΠ±Π΅ΡΠ½Π΅ΡΠ΅Ρ ΠΈΠ»ΠΈ ΠΠΏΠ΅Π½Π‘Ρ
ΠΈΡΡ. ΠΠΊΠΎ ΡΠ΅ ΡΠ΅ΠΎ ΡΠΈΡΡΠ΅ΠΌ Π½Π°ΠΏΠΈΡΠ°Π½ Π½Π° ΠΠ°Π²ΠΈ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ³Π»Π΅Π΄Π°ΡΠΈ ΠΏΡΠ΅ΠΌΠ° Π‘ΠΏΡΠΈΠ½Π³ Π¦Π»ΠΎΡΠ΄ (
Π
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ Π°Π±Ρ.ΡΠΎΠΌ