เจนเฉ เจนเจฌเจฐ.
เจเจธ เจฒเฉเจ เจตเจฟเฉฑเจ, เจฎเฉเจ เจฎเจพเจเจเฉเจฐเฉ เจธเจฐเจตเจฟเจธเจฟเจเจผ เจฆเฉ เจจเจพเจฒ เจชเฉเจฐเจฏเฉเจ เจเจฐเจจ เจฒเจ เจเฉฑเจ เจธเจฟเฉฑเจเจฃ เจฆเจพ เจฎเจพเจนเฉเจฒ เจฌเจฃเจพเจเจฃ เจตเจฟเฉฑเจ เจเจชเจฃเฉ เจ เจจเฉเจญเจต เจฌเจพเจฐเฉ เจเฉฑเจฒ เจเจฐเจจเจพ เจเจพเจนเฉเฉฐเจฆเจพ เจนเจพเจเฅค เจเจฆเฉเจ เจฎเฉเจ เจนเจฐ เจจเจตเฉเจ เจเฉเจฒ เจจเฉเฉฐ เจธเจฟเฉฑเจเจฟเจ, เจฎเฉเจ เจนเจฎเฉเจธเจผเจพ เจเจธเจจเฉเฉฐ เจจเจพ เจธเจฟเจฐเจซเจผ เจธเจฅเจพเจจเจ เจฎเจธเจผเฉเจจ 'เจคเฉ, เจธเจเฉเจ เจนเฉเจฐ เจฏเจฅเจพเจฐเจฅเจตเจพเจฆเฉ เจธเจฅเจฟเจคเฉเจเจ เจตเจฟเฉฑเจ เจตเฉ เจ เจเจผเจฎเจพเจเจฃเจพ เจเจพเจนเฉเฉฐเจฆเจพ เจธเฉเฅค เจเจธ เจฒเจ, เจฎเฉเจ เจเฉฑเจ เจธเจฐเจฒ เจฎเจพเจเจเฉเจฐเฉเจธเจฐเจตเจฟเจธ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจฌเจฃเจพเจเจฃ เจฆเจพ เจซเฉเจธเจฒเจพ เจเฉเจคเจพ เจนเฉ, เจเจฟเจธเจจเฉเฉฐ เจฌเจพเจ เจฆ เจตเจฟเฉฑเจ เจนเจฐ เจคเจฐเฉเจนเจพเจ เจฆเฉเจเจ เจฆเจฟเจฒเจเจธเจช เจคเจเจจเฉเจเจพเจ เจจเจพเจฒ "เจเจตเจฐ" เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉเฅค เจชเฉเจฐเฉเจเฉเจเจ เจฒเจ เจฎเฉเฉฑเจ เจฒเฉเฉ เจ เจธเจฒ เจธเจฟเจธเจเจฎ เจฆเฉ เจตเฉฑเจง เจคเฉเจ เจตเฉฑเจง เจเจพเจฐเจเจธเจผเฉเจฒ เจจเฉเฉเจคเจพ เจนเฉ.
เจธเจผเฉเจฐเฉ เจตเจฟเฉฑเจ, เจฎเฉเจ เจชเฉเจฐเฉเจเฉเจเจ เจฆเฉ เจฐเจเจจเจพ เจจเฉเฉฐ เจเจ เจชเฉเจพเจตเจพเจ เจตเจฟเฉฑเจ เจคเฉเฉ เจฆเจฟเฉฑเจคเจพ:
-
เจฆเฉ เจธเฉเจตเจพเจตเจพเจ เจฌเจฃเจพเจ - 'เจฌเฉเจเจเจเจก' (เจฌเฉเจเจเจเจก) เจ เจคเฉ 'เจเฉเจเจตเฉเจ ' (เจเฉเจเจตเฉ), เจเจนเจจเจพเจ เจจเฉเฉฐ เจกเฉเจเจฐ เจเจฟเฉฑเจคเจฐเจพเจ เจตเจฟเฉฑเจ เจชเฉเจ เจเจฐเฉ เจ เจคเฉ เจเจนเจจเจพเจ เจจเฉเฉฐ เจเจเฉฑเจ เฉ เจเฉฐเจฎ เจเจฐเจจ เจฒเจ เจธเฉเฉฑเจ เจเจฐเฉ
เจเฉเจตเจฐเจก: เจเจพเจตเจพ 11, เจธเจชเจฐเจฟเฉฐเจ เจฌเฉเจ, เจกเฉเจเจฐ, เจเจฟเฉฑเจคเจฐ เจ เจจเฉเจเฉเจฒเจคเจพ
-
เจเฉเจตเจฐเจกเจธ: เจเฉเจฌเจฐเจจเฉเจเจธ, เจเฉเจเฉเจ, เจธเจฐเฉเจค เจชเฉเจฐเจฌเฉฐเจงเจจ, เจเจเฉเจธเจเฉเจฒเจฟเฉฐเจ, เจธเฉเจเจฐเฉเจเจธ
-
เจฌเจฟเจนเจคเจฐ เจเจฒเฉฑเจธเจเจฐ เจชเฉเจฐเจฌเฉฐเจงเจจ เจฒเจ เจนเฉเจฒเจฎ 3 เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจเจพเจฐเจ เจฌเจฃเจพเจเจฃเจพ
เจเฉเจเจธ: เจนเฉเจฒเจฎ 3, เจเจพเจฐเจ เจคเฉเจจเจพเจคเฉ
-
เจเจฒเฉฑเจธเจเจฐ เจจเฉเฉฐ เจเฉเจก เจฆเฉ เจเจเฉเจฎเฉเจเจฟเจ เจกเจฟเจฒเฉเจตเจฐเฉ เจฒเจ เจเฉเจจเจเจฟเจจเจธ เจ เจคเฉ เจชเจพเจเจชเจฒเจพเจเจจ เจธเจฅเจพเจชเจค เจเจฐเจจเจพ
เจเฉเจตเจฐเจกเจธ: เจเฉเจจเจเจฟเฉฐเจธ เจเฉเจเจซเจฟเจเจฐเฉเจธเจผเจจ, เจชเจฒเฉฑเจเจเจจ, เจตเฉฑเจเจฐเฉ เจธเฉฐเจฐเจเจจเจพ เจฐเจฟเจชเฉเจเจผเจเจฐเฉ
เจฎเฉเจ เจนเจฐ เจเจฆเจฎ เจฒเจ เจเฉฑเจ เจตเฉฑเจเจฐเจพ เจฒเฉเจ เจธเจฎเจฐเจชเจฟเจค เจเจฐเจจ เจฆเฉ เจฏเฉเจเจจเจพ เจฌเจฃเจพ เจฐเจฟเจนเจพ เจนเจพเจเฅค
เจฒเฉเจเจพเจ เจฆเฉ เจเจธ เจฒเฉเฉ เจฆเจพ เจซเฉเจเจธ เจเจน เจจเจนเฉเจ เจนเฉ เจเจฟ เจฎเจพเจเจเฉเจฐเฉ เจธเจฐเจตเจฟเจธเจฟเจเจผ เจจเฉเฉฐ เจเจฟเจตเฉเจ เจฒเจฟเจเจฃเจพ เจนเฉ, เจชเจฐ เจเจนเจจเจพเจ เจจเฉเฉฐ เจเฉฑเจ เจธเจฟเจธเจเจฎ เจตเจฟเฉฑเจ เจเจฟเจตเฉเจ เจเฉฐเจฎ เจเจฐเจจเจพ เจนเฉเฅค เจนเจพเจฒเจพเจเจเจฟ เจเจน เจธเจพเจฐเฉเจเจ เจเฉเจเจผเจพเจ เจเจฎ เจคเฉเจฐ 'เจคเฉ เจกเจฟเจตเฉเจฒเจชเจฐ เจฆเฉ เจเจผเจฟเฉฐเจฎเฉเจตเจพเจฐเฉ เจคเฉเจ เจฌเจพเจนเจฐ เจนเฉเฉฐเจฆเฉเจเจ เจนเจจ, เจฎเฉเจจเฉเฉฐ เจฒเจเจฆเจพ เจนเฉ เจเจฟ เจเจน เจ เจเฉ เจตเฉ เจเฉฑเจเฉ เจเฉฑเจ 20% (เจเฉ, เจเจฟเจตเฉเจ เจเจฟ เจคเฉเจธเฉเจ เจเจพเจฃเจฆเฉ เจนเฉ, เจจเจคเฉเจเฉ เจฆเจพ 80% เจฆเจฟเฉฐเจฆเฉ เจนเจจ) เจคเฉเจ เจเจพเจฃเฉ เจนเฉเจฃเจพ เจฒเจพเจญเจฆเจพเจเจ เจนเฉ. เจเฉเจ เจฌเจฟเจจเจพเจ เจธเจผเจฐเจค เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจตเจฟเจธเจผเฉ, เจเจฟเจตเฉเจ เจเจฟ เจธเฉเจฐเฉฑเจเจฟเจ, เจจเฉเฉฐ เจเจธ เจชเฉเจฐเฉเจเฉเจเจ เจคเฉเจ เจฌเจพเจนเจฐ เจฐเฉฑเจเจฟเจ เจเจพเจตเฉเจเจพ, เจเจฟเจเจเจเจฟ เจฒเฉเจเจ เจเจธ เจธเจฟเจธเจเจฎ เจฌเจพเจฐเฉ เจฌเจนเฉเจค เจเฉฑเจ เจธเจฎเจเจฆเจพ เจนเฉ เจเฉ เจธเจฟเจฐเจซเจผ เจจเจฟเฉฑเจเฉ เจตเจฐเจคเฉเจ เจฒเจ เจฌเจฃเจพเจเจ เจเจฟเจ เจนเฉเฅค เจฎเฉเจ เจเจฟเจธเฉ เจตเฉ เจตเจฟเจเจพเจฐ เจ เจคเฉ เจฐเจเจจเจพเจคเจฎเจ เจเจฒเฉเจเจจเจพ เจฆเจพ เจธเฉเจเจเจค เจเจฐเจฆเจพ เจนเจพเจเฅค
เจฎเจพเจเจเฉเจฐเฉ เจธเจฐเจตเจฟเจธเจฟเจเจผ เจฌเจฃเจพเจเจฃเจพ
เจธเฉเจตเจพเจตเจพเจ เจจเฉเฉฐ เจธเจชเจฐเจฟเฉฐเจ เจฌเฉเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ Java 11 เจตเจฟเฉฑเจ เจฒเจฟเจเจฟเจ เจเจฟเจ เจธเฉเฅค เจเฉฐเจเจฐเจธเจฐเจตเจฟเจธ เจเฉฐเจเจฐเจเจเจธเจผเจจ REST เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจเฉ เจเจฏเฉเจเจฟเจค เจเฉเจคเจพ เจเจพเจเจฆเจพ เจนเฉเฅค เจชเฉเจฐเฉเจเฉเจเจ เจตเจฟเฉฑเจ เจเฉเจธเจเจพเจ เจฆเฉ เจเฉฑเจเฉ เจเฉฑเจ เจเจฟเจฃเจคเฉ เจธเจผเจพเจฎเจฒ เจนเฉเจตเฉเจเฉ (เจคเจพเจ เจเฉ เจฌเจพเจ
เจฆ เจตเจฟเฉฑเจ เจเฉเจจเจเจฟเฉฐเจธ เจตเจฟเฉฑเจ เจเฉเจธเจ เจเจฐเจจ เจฒเจ เจเฉเจ เจนเฉเจตเฉ)เฅค เจธเฉเจตเจพเจตเจพเจ เจฒเจ เจธเจฐเฉเจค เจเฉเจก GitHub 'เจคเฉ เจเจชเจฒเจฌเจง เจนเฉ:
เจนเจฐเฉเจ เจธเฉเจตเจพ เจฆเฉ เจธเจฅเจฟเจคเฉ เจฆเฉ เจเจพเจเจ เจเจฐเจจ เจฆเฉ เจฏเฉเจ เจนเฉเจฃ เจฒเจ, เจเจนเจจเจพเจ เจฆเฉ เจจเจฟเจฐเจญเจฐเจคเจพ เจตเจฟเฉฑเจ เจเฉฑเจ เจธเจชเจฐเจฟเฉฐเจ เจเจเจเฉเจเจเจฐ เจเฉเฉเจฟเจ เจเจฟเจ เจนเฉเฅค เจเจน เจเฉฑเจ /เจเจเจเฉเจเจเจฐ/เจนเฉเจฒเจฅ เจเจเจกเจชเฉเจเจเฉฐเจ เจฌเจฃเจพเจเจเจพ เจ เจคเฉ เจเฉเจเจฐ เจธเฉเจตเจพ เจเฉเจฐเฉเจซเจฟเจ เจจเฉเฉฐ เจธเจตเฉเจเจพเจฐ เจเจฐเจจ เจฒเจ เจคเจฟเจเจฐ เจนเฉ เจคเจพเจ 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"));
}
}
เจธเจฐเจตเจฟเจธ เจเฉเจเจตเฉ
เจเฉเจเจตเฉ เจฌเฉเจจเจคเฉ เจจเฉเฉฐ เจฌเฉเจเจเจเจก เจธเฉเจตเจพ เจจเฉเฉฐ เจ เฉฑเจเฉ เจญเฉเจ เจฆเฉเจตเฉเจเจพ, เจเจธ เจจเฉเฉฐ เจนเฉเจ เจฒเจฟเจเฉ เจเจพเจฃเจเจพเจฐเฉ เจฆเฉ เจจเจพเจฒ เจชเฉเจฐเจ เจเจฐเฉเจเจพ:
- เจเฉเจเจตเฉ เจเจ.เจกเฉ. เจเจน เจฒเฉเฉเฉเจเจฆเจพ เจนเฉ เจคเจพเจ เจเจฟ เจธเจฐเจตเจฐ เจเจตเจพเจฌ เจฆเฉเจเจฐเจพ เจเฉเจเจตเฉ เจฆเฉ เจเฉฑเจ เจเจฆเจพเจนเจฐเจฃ เจจเฉเฉฐ เจฆเฉเจเฉ เจคเฉเจ เจตเฉฑเจ เจเจฐเจจเจพ เจธเฉฐเจญเจต เจนเฉ เจธเจเฉ
- เจเฉเจ "เจเฉเจชเจค" เจเฉ เจเฉฑเจ เจฌเจนเฉเจค เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจชเจพเจธเจตเจฐเจก เจฆเฉ เจญเฉเจฎเจฟเจเจพ เจจเจฟเจญเจพเจเจฃเจเฉ (เจเฉฑเจ เจฎเจนเฉฑเจคเจตเจชเฉเจฐเจจ เจเฉเจเฉ เจฆเฉ เจเจจเจเฉเจฐเจฟเจชเจธเจผเจจ เจเฉเฉฐเจเฉ เจฆเฉ เจเจฟเจฃเจคเฉ)
application.properties เจตเจฟเฉฑเจ เจธเฉฐเจฐเจเจจเจพ:
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"]
เจเฉฑเจฅเฉ เจ เจธเฉเจ เจเจชเจฃเฉ เจชเฉเจฐเฉเจเฉเจเจ เจจเฉเฉฐ เจฌเจฃเจพเจเจฃ เจฒเจ เจชเจนเจฟเจฒเจพเจ เจคเฉเจ เจธเจฅเจพเจชเจฟเจค JDK เจฆเฉ เจจเจพเจฒ เจเฉฑเจ เจเจฒเจชเจพเจเจจ เจ เจงเจพเจฐเจค เจ เจงเจพเจฐ เจเจฟเฉฑเจคเจฐ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจฐเจนเฉ เจนเจพเจเฅค ADD เจเจฎเจพเจเจก เจฆเฉ เจจเจพเจฒ, เจ เจธเฉเจ เจฎเฉเจเฉเจฆเจพ src เจกเจพเจเจฐเฉเจเจเจฐเฉ เจจเฉเฉฐ เจเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจ เจเฉเฉเจฆเฉ เจนเจพเจ, เจเจธเจจเฉเฉฐ เจตเจฐเจเจฟเฉฐเจ (WORKDIR) เจตเจเฉเจ เจฎเจพเจฐเจ เจเจฐเจฆเฉ เจนเจพเจ เจ เจคเฉ เจฌเจฟเจฒเจก เจธเจผเฉเจฐเฉ เจเจฐเจฆเฉ เจนเจพเจเฅค EXPOSE 8080 เจเจฎเจพเจเจก เจกเฉเจเจฐ เจจเฉเฉฐ เจธเฉฐเจเฉเจค เจฆเจฟเฉฐเจฆเฉ เจนเฉ เจเจฟ เจเฉฐเจเฉเจจเจฐ เจตเจฟเฉฑเจ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจเจชเจฃเฉ เจชเฉเจฐเจ 8080 เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเฉเจเฉ (เจเจน เจเจชเจฒเฉเจเฉเจธเจผเจจ เจจเฉเฉฐ เจฌเจพเจนเจฐเฉเจ เจชเจนเฉเฉฐเจเจฏเฉเจ เจจเจนเฉเจ เจฌเจฃเจพเจเจเฉ, เจชเจฐ เจเจชเจฒเฉเจเฉเจธเจผเจจ เจจเฉเฉฐ เจเจเจธเฉเจธ เจเจฐเจจ เจฆเฉ เจเจเจฟเจ เจฆเฉเจตเฉเจเฉ, เจเจฆเจพเจนเจฐเจจ เจฒเจ, เจเจธเฉ เจกเฉเจเจฐ เจจเฉเจเจตเจฐเจ เจคเฉ เจเจฟเจธเฉ เจนเฉเจฐ เจเฉฐเจเฉเจจเจฐ เจคเฉเจเฅค ).
เจธเฉเจตเจพเจตเจพเจ เจจเฉเฉฐ เจเจฟเฉฑเจคเจฐเจพเจ เจตเจฟเฉฑเจ เจชเฉเจเฉเจ เจเจฐเจจ เจฒเจ, เจคเฉเจนเจพเจจเฉเฉฐ เจนเจฐเฉเจ เจชเฉเจฐเฉเจเฉเจเจ เจฆเฉ เจฐเฉเจ เจคเฉเจ เจเจฎเจพเจเจกเจพเจ เจเจฒเจพเจเจฃ เจฆเฉ เจฒเฉเฉ เจนเฉ:
docker image build . -t msvc-backend:1.0.0
เจจเจคเฉเจเจพ เจเฉฑเจ 456 MB เจเจฟเฉฑเจคเจฐ เจนเฉ (เจเจฟเจธ เจตเจฟเฉฑเจเฉเจ เจ เจงเจพเจฐ JDK เจเจฟเฉฑเจคเจฐ เจจเฉ 340 MB เจเฉฑเจคเฉ เจเจฌเจเจผเจพ เจเฉเจคเจพ เจนเฉ)เฅค เจ เจคเฉ เจเจน เจธเจญ เจเจธ เจคเฉฑเจฅ เจฆเฉ เจฌเจพเจตเจเฉเจฆ เจเจฟ เจธเจพเจกเฉ เจชเฉเจฐเฉเจเฉเจเจ เจตเจฟเฉฑเจ เจเจฒเจพเจธเจพเจ เจเฉฑเจ เจเจเจเจฒเฉ 'เจคเฉ เจเจฟเจฃเฉเจเจ เจเจพ เจธเจเจฆเฉเจเจ เจนเจจ. เจธเจพเจกเฉ เจเจฟเฉฑเจคเจฐ เจฆเฉ เจเจเจพเจฐ เจจเฉเฉฐ เจเจเจพเจเจฃ เจฒเจ:
- เจ เจธเฉเจ เจฎเจฒเจเฉ-เจธเจเฉเจช เจ เจธเฉเจเจฌเจฒเฉ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจเฅค เจชเจนเจฟเจฒเฉ เจชเฉเจพเจ เจตเจฟเฉฑเจ เจ เจธเฉเจ เจชเฉเจฐเฉเจเฉเจเจ เจฆเจพ เจจเจฟเจฐเจฎเจพเจฃ เจเจฐเจพเจเจเฉ, เจฆเฉเจเฉ เจชเฉเจพเจ เจตเจฟเฉฑเจ เจ เจธเฉเจ เจเฉเจเจฐเจ เจจเฉเฉฐ เจธเจฅเจพเจชเจฟเจค เจเจฐเจพเจเจเฉ, เจ เจคเฉ เจคเฉเจเฉ เจชเฉเจพเจ เจตเจฟเฉฑเจ เจ เจธเฉเจ เจเจธเจจเฉเฉฐ เจเฉฑเจ เจจเจตเฉเจ เจธเจพเจซเจผ เจ เจฒเจชเจพเจเจจ เจเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจ เจเจพเจชเฉ เจเจฐเจพเจเจเฉเฅค เจเฉเฉฑเจฒ เจฎเจฟเจฒเจพ เจเฉ, เจธเจฟเจฐเจซ เจฒเฉเฉเฉเจเจฆเฉ เจนเจฟเฉฑเจธเฉ เจซเจพเจเจจเจฒ เจเจฟเฉฑเจคเจฐ เจตเจฟเฉฑเจ เจนเฉเจฃเจเฉ.
- เจเจ เจเจพเจตเจพ เจฆเฉ เจฎเจพเจกเจฟเจเจฒเจฐเจพเจเจเจผเฉเจธเจผเจจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเฉเจเฅค Java 9 เจจเจพเจฒ เจธเจผเฉเจฐเฉ เจเจฐเจฆเฉ เจนเฉเจ, เจคเฉเจธเฉเจ เจธเจฟเจฐเจซเจผ เจฒเฉเฉเฉเจเจฆเฉ เจฎเฉเจกเจฟเจเจฒเจพเจ เจคเฉเจ JRE เจฌเจฃเจพเจเจฃ เจฒเจ jlink เจเฉเจฒ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐ เจธเจเจฆเฉ เจนเฉเฅค
เจชเฉเฉฑเจเจเจฟเฉฑเจ เจฒเจ, เจเฉฑเจฅเฉ เจเจฟเฉฑเจคเจฐ เจเจเจพเจเจฃ เจฆเฉ เจคเจฐเฉเจเจฟเจเจ 'เจคเฉ เจเฉฑเจ เจตเจงเฉเจ เจฒเฉเจ เจนเฉ.
เจซเจพเจเจจเจฒ เจกเฉเจเจฐเจซเจพเจเจฒ:
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 MB เจนเฉเฅค เจญเฉเฉเจพ เจจเจนเฉเจ. เจเจธ เจคเฉเจ เจฌเจพเจ เจฆ, เจคเจฟเจเจฐ เจเจฟเฉฑเจคเจฐเจพเจ เจจเฉเฉฐ เจเจฟเฉฑเจคเจฐ เจฐเจเจฟเจธเจเจฐเฉ เจตเจฟเฉฑเจ เจ เจชเจฒเฉเจก เจเฉเจคเจพ เจเจพ เจธเจเจฆเจพ เจนเฉ เจคเจพเจ เจเฉ เจคเฉเจนเจพเจกเฉเจเจ เจคเจธเจตเฉเจฐเจพเจ เจเฉฐเจเจฐเจจเฉเจ เจคเฉเจ เจกเจพเจเจจเจฒเฉเจก เจเจฐเจจ เจฒเจ เจเจชเจฒเจฌเจง เจนเฉเจฃเฅค
เจกเฉเจเจฐ เจตเจฟเฉฑเจ เจธเจนเจฟ-เจเจฒเจพเจเจฃ เจตเจพเจฒเฉเจเจ เจธเฉเจตเจพเจตเจพเจ
เจธเจผเฉเจฐเฉ เจเจฐเจจ เจฒเจ, เจธเจพเจกเฉเจเจ เจธเฉเจตเจพเจตเจพเจ เจเฉฑเจเฉ เจจเฉเฉฑเจเจตเจฐเจ 'เจคเฉ เจนเฉเจฃเฉเจเจ เจเจพเจนเฉเจฆเฉเจเจ เจนเจจเฅค เจกเฉเจเจฐ เจตเจฟเฉฑเจ เจเจ เจเจฟเจธเจฎเจพเจ เจฆเฉ เจจเฉเจเจตเจฐเจ เจนเฉเฉฐเจฆเฉ เจนเจจ, เจ เจคเฉ เจ เจธเฉเจ เจเจนเจจเจพเจ เจตเจฟเฉฑเจเฉเจ เจธเจญ เจคเฉเจ เจฎเฉเฉฑเจขเจฒเฉ - เจฌเฉเจฐเจฟเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจ, เจเฉ เจคเฉเจนเจพเจจเฉเฉฐ เจเจธเฉ เจนเฉเจธเจ เจคเฉ เจเฉฑเจฒ เจฐเจนเฉ เจจเฉเจเจตเจฐเจ เจเฉฐเจเฉเจจเจฐเจพเจ เจฆเฉ เจเจเจฟเจ เจฆเจฟเฉฐเจฆเจพ เจนเฉเฅค เจนเฉเจ เจฆเจฟเฉฑเจคเฉ เจเจฎเจพเจเจก เจจเจพเจฒ เจเฉฑเจ เจจเฉเฉฑเจเจตเจฐเจ เจฌเจฃเจพเจ:
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 เจจเฉเฉฐ เจ เฉฑเจเฉ เจญเฉเจ เจฐเจนเฉ เจนเจพเจเฅค เจ เจธเฉเจ เจตเจพเจคเจพเจตเจฐเจฃ เจตเฉเจฐเฉเจเจฌเจฒเจพเจ เจจเฉเฉฐ เจธเฉเฉฑเจ เจเจฐเจจ เจฒเจ env เจตเจฟเจเจฒเจชเจพเจ เจฆเฉ เจตเจฐเจคเฉเจ เจเจฐเจฆเฉ เจนเจพเจ เจเฉ เจธเจชเจฐเจฟเฉฐเจ เจฆเฉเจเจฐเจพ เจเจชเจฃเฉ เจเจช เจชเฉเฉเจนเฉ เจเจพเจฃเจเฉ เจ เจคเฉ application.properties เจคเฉเจ เจตเจฟเจธเจผเฉเจธเจผเจคเจพเจตเจพเจ เจจเฉเฉฐ เจเจตเจฐเจฐเจพเจเจก เจเจฐเจจเจเฉเฅค
เจธเจผเฉเจฐเฉ เจเจฐเจจ เจคเฉเจ เจฌเจพเจ
เจฆ, เจ
เจธเฉเจ เจเจพเจฒ เจเจฐเจฆเฉ เจนเจพเจ
เจธเจฟเฉฑเจเจพ
เจจเจคเฉเจเฉ เจตเจเฉเจ, เจ เจธเฉเจ เจฆเฉ เจธเจงเจพเจฐเจจ เจฎเจพเจเจเฉเจฐเฉ เจธเจฐเจตเจฟเจธเจฟเจเจผ เจฌเจฃเจพเจ, เจเจนเจจเจพเจ เจจเฉเฉฐ เจกเฉเจเจฐ เจเฉฐเจเฉเจจเจฐเจพเจ เจตเจฟเฉฑเจ เจชเฉเจ เจเฉเจคเจพ เจ เจคเฉ เจเจนเจจเจพเจ เจจเฉเฉฐ เจเฉฑเจเฉ เจฎเจธเจผเฉเจจ 'เจคเฉ เจเจเฉฑเจ เฉ เจฒเจพเจเจ เจเฉเจคเจพเฅค เจจเจคเฉเจเฉ เจตเจเฉเจ เจธเจฟเจธเจเจฎ เจฆเฉ, เจนเจพเจฒเจพเจเจเจฟ, เจเจ เจจเฉเจเจธเจพเจจ เจนเจจ:
- เจฎเจพเฉเฉ เจจเฉเจเจธ เจธเจนเจฟเจฃเจธเจผเฉเจฒเจคเจพ - เจเฉฑเจ เจธเจฐเจตเจฐ 'เจคเฉ เจธเจพเจกเฉ เจฒเจ เจธเจญ เจเฉเจ เจเฉฐเจฎ เจเจฐเจฆเจพ เจนเฉ
- เจฎเจพเฉเฉ เจฎเจพเจชเจฏเฉเจเจคเจพ - เจเจฆเฉเจ เจฒเฉเจก เจตเจงเจฆเจพ เจนเฉ, เจคเจพเจ เจเจชเจฃเฉ เจเจช เจตเจพเจงเฉ เจธเฉเจตเจพ เจเจฆเจพเจนเจฐเจจเจพเจ เจจเฉเฉฐ เจคเฉเจจเจพเจค เจเจฐเจจเจพ เจ เจคเฉ เจเจนเจจเจพเจ เจตเจฟเจเจเจพเจฐ เจฒเฉเจก เจจเฉเฉฐ เจธเฉฐเจคเฉเจฒเจฟเจค เจเจฐเจจเจพ เจเฉฐเจเจพ เจนเฉเจตเฉเจเจพ
- เจฒเจพเจเจ เจฆเฉ เจเฉเฉฐเจเจฒเจคเจพ - เจธเจพเจจเฉเฉฐ เจเฉฑเจเฉ เจเฉฑเจ 3 เจเจฎเจพเจเจกเจพเจ เจฆเจพเจเจฒ เจเจฐเจจ เจฆเฉ เจฒเฉเฉ เจธเฉ, เจ เจคเฉ เจเฉเจ เจฎเจพเจชเจฆเฉฐเจกเจพเจ เจฆเฉ เจจเจพเจฒ (เจเจน เจธเจฟเจฐเจซ 2 เจธเฉเจตเจพเจตเจพเจ เจฒเจ เจนเฉ)
เจเจชเจฐเฉเจเจค เจธเจฎเฉฑเจธเจฟเจเจตเจพเจ เจจเฉเฉฐ เจนเฉฑเจฒ เจเจฐเจจ เจฒเจ, เจฌเจนเฉเจค เจธเจพเจฐเฉ เจนเฉฑเจฒ เจนเจจ เจเจฟเจตเฉเจ เจเจฟ เจกเฉเจเจฐ เจธเจตเฉเจฐเจฎ, เจจเฉเจฎเฉเจก, เจเฉเจฌเจฐเจจเฉเจเจธ เจเจพเจ เจเจชเจจเจธเจผเจฟเจซเจเฅค เจเฉ เจธเจพเจฐเจพ เจธเจฟเจธเจเจฎ เจเจพเจตเจพ เจตเจฟเฉฑเจ เจฒเจฟเจเจฟเจ เจเจฟเจ เจนเฉ, เจคเจพเจ เจคเฉเจธเฉเจ เจธเจชเจฐเจฟเฉฐเจ เจเจฒเจพเจเจก (
ะ
เจธเจฐเฉเจค: www.habr.com