เชฎเชพเช‡เช•เซเชฐเซ‹เชธเซ‡เชตเชพเช“ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชœเชฎเชพเชตเชตเซ€ เชคเซ‡ เชœเชพเชฃเซ‹. เชญเชพเช— 1. เชธเซเชชเซเชฐเชฟเช‚เช— เชฌเซ‚เชŸ เช…เชจเซ‡ เชกเซ‹เช•เชฐ

เชฎเชพเช‡เช•เซเชฐเซ‹เชธเซ‡เชตเชพเช“ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชœเชฎเชพเชตเชตเซ€ เชคเซ‡ เชœเชพเชฃเซ‹. เชญเชพเช— 1. เชธเซเชชเซเชฐเชฟเช‚เช— เชฌเซ‚เชŸ เช…เชจเซ‡ เชกเซ‹เช•เชฐ

เชนเซ‡ เชนเชฌเชฐ.

เช† เชฒเซ‡เช–เชฎเชพเช‚, เชนเซเช‚ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธเชฟเชธ เชธเชพเชฅเซ‡ เชชเซเชฐเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชถเซ€เช–เชตเชพเชจเซเช‚ เชตเชพเชคเชพเชตเชฐเชฃ เชฌเชจเชพเชตเชตเชพเชจเชพ เชฎเชพเชฐเชพ เช…เชจเซเชญเชต เชตเชฟเชถเซ‡ เชตเชพเชค เช•เชฐเชตเชพ เชฎเชพเช‚เช—เซ เช›เซเช‚. เชฆเชฐเซ‡เช• เชจเชตเซเช‚ เชธเชพเชงเชจ เชถเซ€เช–เชคเซ€ เชตเช–เชคเซ‡, เชนเซเช‚ เชนเช‚เชฎเซ‡เชถเชพ เชคเซ‡เชจเซ‡ เชฎเชพเชคเซเชฐ เชฎเชพเชฐเชพ เชธเซเชฅเชพเชจเชฟเช• เชฎเชถเซ€เชจ เชชเชฐ เชœ เชจเชนเซ€เช‚, เชชเชฃ เชตเชงเซ เชตเชพเชธเซเชคเชตเชฟเช• เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเช“เชฎเชพเช‚ เชชเชฃ เช…เชœเชฎเชพเชตเชตเชพ เชฎเชพเช‚เช—เชคเซ‹ เชนเชคเซ‹. เชคเซ‡เชฅเซ€, เชฎเซ‡เช‚ เชเช• เชธเชฐเชณ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพเชจเซเช‚ เชจเช•เซเช•เซ€ เช•เชฐเซเชฏเซเช‚, เชœเซ‡ เชชเช›เซ€เชฅเซ€ เชคเชฎเชพเชฎ เชชเซเชฐเช•เชพเชฐเชจเซ€ เชฐเชธเชชเซเชฐเชฆ เชคเช•เชจเซ€เช•เซ‹ เชธเชพเชฅเซ‡ "เชนเช‚เช—" เชฅเชˆ เชถเช•เซ‡ เช›เซ‡. เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸ เชฎเชพเชŸเซ‡เชจเซ€ เชฎเซเช–เซเชฏ เช†เชตเชถเซเชฏเช•เชคเชพ เช เชตเชพเชธเซเชคเชตเชฟเช• เชธเชฟเชธเซเชŸเชฎเชจเซ€ เชคเซ‡เชจเซ€ เชฎเชนเชคเซเชคเชฎ เช•เชพเชฐเซเชฏเชพเชคเซเชฎเช• เชจเชฟเช•เชŸเชคเชพ เช›เซ‡.

เชถเชฐเซ‚เช†เชคเชฎเชพเช‚, เชฎเซ‡เช‚ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ€ เชฐเชšเชจเชพเชจเซ‡ เช˜เชฃเชพ เชชเช—เชฒเชพเช“เชฎเชพเช‚ เชตเชฟเชญเชพเชœเชฟเชค เช•เชฐเซ€:

  1. เชฌเซ‡ เชธเซ‡เชตเชพเช“ เชฌเชจเชพเชตเซ‹ - 'เชฌเซ‡เช•เชเชจเซเชก' เช…เชจเซ‡ 'เช—เซ‡เชŸเชตเซ‡', เชคเซ‡เชฎเชจเซ‡ เชกเซ‹เช•เชฐ เชˆเชฎเซ‡เชœเซ€เชธเชฎเชพเช‚ เชชเซ‡เช• เช•เชฐเซ‹ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ‡ เชเช•เชธเชพเชฅเซ‡ เช•เชพเชฎ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช—เซ‹เช เชตเซ‹

    เช•เซ€เชตเชฐเซเชกเซเชธ: เชœเชพเชตเชพ 11, เชธเซเชชเซเชฐเชฟเช‚เช— เชฌเซ‚เชŸ, เชกเซ‹เช•เชฐ, เช‡เชฎเซ‡เชœ เช“เชชเซเชŸเชฟเชฎเชพเช‡เชเซ‡เชถเชจ

  2. Google Kubernetes Engine เชฎเชพเช‚ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช•เชจเซเชซเชฟเช—เชฐเซ‡เชถเชจ เช…เชจเซ‡ เชกเชฟเชชเซเชฒเซ‹เชฏเชฎเซ‡เชจเซเชŸ เชธเชฟเชธเซเชŸเชฎเชจเซ‹ เชตเชฟเช•เชพเชธ

    เช•เซ€เชตเชฐเซเชกเซเชธ: เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ, เชœเซ€เช•เซ‡เช‡, เชฐเชฟเชธเซ‹เชฐเซเชธ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ, เช“เชŸเซ‹เชธเซเช•เซ‡เชฒเชฟเช‚เช—, เชธเชฟเช•เซเชฐเซ‡เชŸ

  3. เชตเชงเซ เช•เชพเชฐเซเชฏเช•เซเชทเชฎ เช•เซเชฒเชธเซเชŸเชฐ เชฎเซ‡เชจเซ‡เชœเชฎเซ‡เชจเซเชŸ เชฎเชพเชŸเซ‡ เชนเซ‡เชฒเซเชฎ 3 เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชšเชพเชฐเซเชŸ เชฌเชจเชพเชตเซ‹

    เช•เซ€เชตเชฐเซเชกเซเชธ: เชนเซ‡เชฒเซเชฎ 3, เชšเชพเชฐเซเชŸ เชœเชฎเชพเชตเชŸ

  4. เช•เซเชฒเชธเซเชŸเชฐเชฎเชพเช‚ เช•เซ‹เชก เช†เชชเชฎเซ‡เชณเซ‡ เชชเชนเซ‹เช‚เชšเชพเชกเชตเชพ เชฎเชพเชŸเซ‡ เชœเซ‡เชจเช•เชฟเชจเซเชธ เช…เชจเซ‡ เชชเชพเช‡เชชเชฒเชพเช‡เชจ เชธเซ‡เชŸ เช•เชฐเซ€ เชฐเชนเซเชฏเชพเช‚ เช›เซ€เช

    เช•เซ€เชตเชฐเซเชกเซเชธ: เชœเซ‡เชจเช•เชฟเชจเซเชธ เชฐเซ‚เชชเชฐเซ‡เช–เชพเช‚เช•เชจ, เชชเซเชฒเช—เชˆเชจเซเชธ, เช…เชฒเช— เชฐเซ‚เชชเชฐเซ‡เช–เชพเช“ เชญเช‚เชกเชพเชฐ

เชนเซเช‚ เชฆเชฐเซ‡เช• เชชเช—เชฒเชพ เชฎเชพเชŸเซ‡ เชเช• เช…เชฒเช— เชฒเซ‡เช– เชธเชฎเชฐเซเชชเชฟเชค เช•เชฐเชตเชพเชจเซ€ เชฏเซ‹เชœเชจเชพ เช˜เชกเซ€ เชฐเชนเซเชฏเซ‹ เช›เซเช‚.

เชฒเซ‡เช–เซ‹เชจเซ€ เช† เชถเซเชฐเซ‡เชฃเซ€เชจเซเช‚ เชงเซเชฏเชพเชจ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธเชฟเชธ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเช–เชตเซเช‚ เชคเซ‡ เชจเชฅเซ€, เชชเชฐเช‚เชคเซ เชคเซ‡เชฎเชจเซ‡ เชเช• เชธเชฟเชธเซเชŸเชฎเชฎเชพเช‚ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช•เชพเชฐเซเชฏ เช•เชฐเชตเซเช‚ เชคเซ‡ เช›เซ‡. เชœเซเชฏเชพเชฐเซ‡ เช† เชฌเชงเซ€ เชตเชธเซเชคเซเช“ เชธเชพเชฎเชพเชจเซเชฏ เชฐเซ€เชคเซ‡ เชตเชฟเช•เชพเชธเช•เชฐเซเชคเชพเชจเซ€ เชœเชตเชพเชฌเชฆเชพเชฐเซ€เชจเซ€ เชฌเชนเชพเชฐ เชนเซ‹เชฏ เช›เซ‡, เชคเซเชฏเชพเชฐเซ‡ เชฎเชจเซ‡ เชฒเชพเช—เซ‡ เช›เซ‡ เช•เซ‡ เชคเซ‡เชฎเชจเซ€ เชธเชพเชฅเซ‡ เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ 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")

เชฌเชงเซเช‚ เช•เชพเชฎ เช•เชฐเซ€ เชฐเชนเซเชฏเซเช‚ เช›เซ‡. เชธเชšเซ‡เชค เชตเชพเชšเช• เชจเซ‹เช‚เชง เช•เชฐเชถเซ‡ เช•เซ‡ เช—เซ‡เชŸเชตเซ‡เชจเซ‡ เชฌเชพเชฏเชชเชพเชธ เช•เชฐเซ€เชจเซ‡, เชฌเซ‡เช•เชเชจเซเชกเชจเซ‡ เชธเซ€เชงเชพ เชœ เชเช•เซเชธเซ‡เชธ เช•เชฐเชตเชพเชฅเซ€ เช…เชฎเชจเซ‡ เช•เช‚เชˆเชชเชฃ เช…เชŸเช•เชพเชตเชคเซเช‚ เชจเชฅเซ€ (http://localhost:8081/requests). เช†เชจเซ‡ เช เซ€เช• เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชธเซ‡เชตเชพเช“เชจเซ‡ เชเช• เชจเซ‡เชŸเชตเชฐเซเช•เชฎเชพเช‚ เชœเซ‹เชกเชตเซ€ เช†เชตเชถเซเชฏเช• เช›เซ‡, เช…เชจเซ‡ เชซเช•เซเชค เช—เซ‡เชŸเชตเซ‡ เชœ เชฌเชนเชพเชฐ "เชธเซเชŸเซ€เช• เช†เช‰เชŸ" เชนเซ‹เชตเซ‹ เชœเซ‹เชˆเช.
เช‰เชชเชฐเชพเช‚เชค, เชฌเช‚เชจเซ‡ เชธเซ‡เชตเชพเช“ เชธเชฎเชพเชจ เชซเชพเช‡เชฒ เชธเชฟเชธเซเชŸเชฎ เชถเซ‡เชฐ เช•เชฐเซ‡ เช›เซ‡, เชฅเซเชฐเซ‡เชกเซ‹ เชœเชจเชฐเซ‡เชŸ เช•เชฐเซ‡ เช›เซ‡ เช…เชจเซ‡ เชเช• เชธเชฎเชฏเซ‡ เชเช•เชฌเซ€เชœเชพ เชธเชพเชฅเซ‡ เชฆเช–เชฒ เช•เชฐเชตเชพเชจเซเช‚ เชถเชฐเซ‚ เช•เชฐเซ€ เชถเช•เซ‡ เช›เซ‡. เช…เชฎเชพเชฐเซ€ เชฎเชพเชˆเช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธเชฟเชธเชจเซ‡ เช…เชฒเช— เช•เชฐเชตเซ€ เชธเชฐเชธ เชฐเชนเซ‡เชถเซ‡. เช† เชตเชฟเชตเชฟเชง เชฎเชถเซ€เชจเซ‹ (เช˜เชฃเชพ เชชเซˆเชธเชพ, เชฎเซเชถเซเช•เซ‡เชฒ), เชตเชฐเซเชšเซเชฏเซเช…เชฒ เชฎเชถเซ€เชจเซ‹ (เชธเช‚เชธเชพเชงเชจ-เชธเช˜เชจ, เชฒเชพเช‚เชฌเชพ เชธเซเชŸเชพเชฐเซเชŸเช…เชช) เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช…เชฅเชตเชพ เช•เชจเซเชŸเซ‡เชจเชฐเชพเช‡เชเซ‡เชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เชเชชเซเชฒเชฟเช•เซ‡เชถเชจเซเชธเชจเซเช‚ เชตเชฟเชคเชฐเชฃ เช•เชฐเซ€เชจเซ‡ เชชเซเชฐเชพเชชเซเชค เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡. เช…เชชเซ‡เช•เซเชทเชพ เชฎเซเชœเชฌ, เช…เชฎเซ‡ เชคเซเชฐเซ€เชœเซ‹ เชตเชฟเช•เชฒเซเชช เชชเชธเช‚เชฆ เช•เชฐเซ€เช เช›เซ€เช เช…เชจเซ‡ Docker เช•เชจเซเชŸเซ‡เชจเชฐเชพเช‡เชเซ‡เชถเชจ เชฎเชพเชŸเซ‡เชจเชพ เชธเชพเชงเชจ เชคเชฐเซ€เช•เซ‡.

Docker

เชŸเซ‚เช‚เช•เชฎเชพเช‚, เชกเซ‹เช•เชฐ เชฆเชฐเซ‡เช• เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฆเซ€เช  เชเช• เช…เชฒเช— เช•เชจเซเชŸเซ‡เชจเชฐ เชฌเชจเชพเชตเซ‡ เช›เซ‡. เชกเซ‹เช•เชฐเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เชคเชฎเชพเชฐเซ‡ เชกเซ‹เช•เชฐเชซเชพเชˆเชฒ เชฒเช–เชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ - เชเชชเซเชฒเชฟเช•เซ‡เชถเชจ เชฌเชจเชพเชตเชตเชพ เช…เชจเซ‡ เชšเชฒเชพเชตเชตเชพ เชฎเชพเชŸเซ‡เชจเซ€ เชธเซ‚เชšเชจเชพเช“. เช†เช—เชณ, เชคเชฎเซ‡ เช‡เชฎเซ‡เชœ เชฌเชจเชพเชตเซ€ เชถเช•เซ‹ เช›เซ‹, เชคเซ‡เชจเซ‡ เช‡เชฎเซ‡เชœ เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€เชฎเชพเช‚ เช…เชชเชฒเซ‹เชก เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹ (เชจเช‚. เชกเซ‹เช•เชฐเชนเชฌ) เช…เชจเซ‡ เชคเชฎเชพเชฐเซ€ เชฎเชพเช‡เช•เซเชฐเซ‹เชธเชฐเซเชตเชฟเชธเชจเซ‡ เชเช• เช†เชฆเซ‡เชถเชฎเชพเช‚ เช•เซ‹เชˆเชชเชฃ เชกเซ‹เช•เชฐเชพเช‡เชเซเชก เชเชจเซเชตเชพเชฏเชฐเซเชจเชฎเซ‡เชจเซเชŸเชฎเชพเช‚ เชคเซˆเชจเชพเชค เช•เชฐเซ‹.

เชกเซ‹เช•เชฐเชซเชพเช‡เชฒ

เช›เชฌเซ€เชจเซ€ เชธเซŒเชฅเซ€ เชฎเชนเชคเซเชตเชชเซ‚เชฐเซเชฃ เชฒเชพเช•เซเชทเชฃเชฟเช•เชคเชพเช“เชฎเชพเช‚เชจเซ€ เชเช• เชคเซ‡เชจเซเช‚ เช•เชฆ เช›เซ‡. เช•เซ‹เชฎเซเชชเซ‡เช•เซเชŸ เช‡เชฎเซ‡เชœ เชฐเชฟเชฎเซ‹เชŸ เชฐเชฟเชชเซ‹เชเซ€เชŸเชฐเซ€เชฎเชพเช‚เชฅเซ€ เชเชกเชชเชฅเซ€ เชกเชพเช‰เชจเชฒเซ‹เชก เชฅเชถเซ‡, เช“เช›เซ€ เชœเช—เซเชฏเชพ เชฒเซ‡เชถเซ‡ เช…เชจเซ‡ เชคเชฎเชพเชฐเซ€ เชธเซ‡เชตเชพ เชเชกเชชเชฅเซ€ เชถเชฐเซ‚ เชฅเชถเซ‡. เช•เซ‹เชˆเชชเชฃ เช›เชฌเซ€ เชฎเซ‚เชณเชญเซ‚เชค เช›เชฌเซ€เชจเชพ เช†เชงเชพเชฐเซ‡ เชฌเชจเชพเชตเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡, เช…เชจเซ‡ เชธเซŒเชฅเซ€ เชธเชฐเชณ เชตเชฟเช•เชฒเซเชช เชชเชธเช‚เชฆ เช•เชฐเชตเชพเชจเซ€ เชญเชฒเชพเชฎเชฃ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชเช• เชธเชพเชฐเซ‹ เชตเชฟเช•เชฒเซเชช เช†เชฒเซเชชเชพเช‡เชจ เช›เซ‡, เชœเซ‡ เชจเซเชฏเซ‚เชจเชคเชฎ เชชเซ‡เช•เซ‡เชœเซ‹ เชธเชพเชฅเซ‡ เชธเช‚เชชเซ‚เชฐเซเชฃ เชธเซเชตเชฟเชงเชพเชฏเซเช•เซเชค Linux เชตเชฟเชคเชฐเชฃ เช›เซ‡.

เชชเซเชฐเชฅเชฎ, เชšเชพเชฒเซ‹ เชกเซ‹เช•เชฐเชซเชพเชˆเชฒ "เชนเซ‡เชก-เช“เชจ" เชฒเช–เชตเชพเชจเซ‹ เชชเซเชฐเชฏเชพเชธ เช•เชฐเซ€เช (เชนเซเช‚ เชคเชฐเชค เชœ เช•เชนเซ€เชถ เช•เซ‡ เช† เชเช• เช–เชฐเชพเชฌ เชฐเซ€เชค เช›เซ‡, เชคเซ‡ เช•เชฐเชถเซ‹ เชจเชนเซ€เช‚):

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 เชฒเซ‡ เช›เซ‡). เช…เชจเซ‡ เชฌเชงเชพ เช เชนเช•เซ€เช•เชค เชนเซ‹เชตเชพ เช›เชคเชพเช‚ เช•เซ‡ เช…เชฎเชพเชฐเชพ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชฎเชพเช‚ เชตเชฐเซเช—เซ‹ เชเช• เช†เช‚เช—เชณเซ€ เชชเชฐ เช—เชฃเซ€ เชถเช•เชพเชฏ. เช…เชฎเชพเชฐเซ€ เช›เชฌเซ€เชจเซเช‚ เช•เชฆ เช˜เชŸเชพเชกเชตเชพ เชฎเชพเชŸเซ‡:

  • เช…เชฎเซ‡ เชฎเชฒเซเชŸเชฟ-เชธเซเชŸเซ‡เชช เชเชธเซ‡เชฎเซเชฌเชฒเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช. เชชเซเชฐเชฅเชฎ เชชเช—เชฒเชพเชฎเชพเช‚ เช†เชชเชฃเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ เชเชธเซ‡เชฎเซเชฌเชฒ เช•เชฐเซ€เชถเซเช‚, เชฌเซ€เชœเชพเชฎเชพเช‚ เช†เชชเชฃเซ‡ JRE เช‡เชจเซเชธเซเชŸเซ‹เชฒ เช•เชฐเซ€เชถเซเช‚, เช…เชจเซ‡ เชคเซเชฐเซ€เชœเชพ เชชเช—เชฒเชพเชฎเชพเช‚ เช†เชชเชฃเซ‡ เช† เชฌเชงเชพเชจเซ‡ เชจเชตเซ€ เชธเซเชตเชšเซเช› เช†เชฒเซเชชเชพเชˆเชจ เชˆเชฎเซ‡เชœเชฎเชพเช‚ เช•เซ‹เชชเซ€ เช•เชฐเซ€เชถเซเช‚. เช•เซเชฒเชฎเชพเช‚, เช…เช‚เชคเชฟเชฎ เช›เชฌเซ€เชฎเชพเช‚ เชซเช•เซเชค เชœเชฐเซ‚เชฐเซ€ เช˜เชŸเช•เซ‹ เชนเชถเซ‡.
  • เชšเชพเชฒเซ‹ เชœเชพเชตเชพ เชฎเซ‹เชกเซเชฏเซเชฒเชฐเชพเชˆเชเซ‡เชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช. Java 9 เชฅเซ€ เชถเชฐเซ‚ เช•เชฐเซ€เชจเซ‡, เชคเชฎเซ‡ เชซเช•เซเชค เชคเชฎเชจเซ‡ เชœเซ‹เชˆเชคเชพ เชฎเซ‹เชกเซเชฏเซเชฒเซ‹เชฎเชพเช‚เชฅเซ€ JRE เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ jlink เชŸเซ‚เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ‹ เช›เซ‹.

เชœเชฟเชœเซเชžเชพเชธเซเช“ เชฎเชพเชŸเซ‡, เช›เชฌเซ€เชจเชพ เช•เชฆเชจเซ‡ เช˜เชŸเชพเชกเชตเชพเชจเชพ เช…เชญเชฟเช—เชฎเซ‹ เชตเชฟเชถเซ‡ เช…เชนเซ€เช‚ เชเช• เชธเชพเชฐเซ‹ เชฒเซ‡เช– เช›เซ‡ https://habr.com/ru/company/ruvds/blog/485650/.

เช…เช‚เชคเชฟเชฎ เชกเซ‹เช•เชฐเชซเชพเช‡เชฒ:

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 MB เชœเซ‡เชŸเชฒเซ€ 77 เช—เชฃเซ€ เชชเชพเชคเชณเซ€ เชฌเชจเซ€. เช–เชฐเชพเชฌ เชจเชฅเซ€. เชชเช›เซ€เชฅเซ€, เชซเชฟเชจเชฟเชถเซเชก เชˆเชฎเซ‡เชœเซ‹ เชˆเชฎเซ‡เชœ เชฐเชœเชฟเชธเซเชŸเซเชฐเซ€ เชชเชฐ เช…เชชเชฒเซ‹เชก เช•เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ เชœเซ‡เชฅเซ€ เชคเชฎเชพเชฐเซ€ เชˆเชฎเซ‡เชœเซ‹ เชˆเชจเซเชŸเชฐเชจเซ‡เชŸ เชชเชฐเชฅเซ€ เชกเชพเช‰เชจเชฒเซ‹เชก เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เช‰เชชเชฒเชฌเซเชง เชนเซ‹เชฏ.

เชกเซ‹เช•เชฐเชฎเชพเช‚ เชเช•เชธเชพเชฅเซ‡ เชธเซ‡เชตเชพเช“ เชšเชฒเชพเชตเชตเซ€

เชถเชฐเซ‚เช†เชคเชฎเชพเช‚, เช…เชฎเชพเชฐเซ€ เชธเซ‡เชตเชพเช“ เชธเชฎเชพเชจ เชจเซ‡เชŸเชตเชฐเซเช• เชชเชฐ เชนเซ‹เชตเซ€ เช†เชตเชถเซเชฏเช• เช›เซ‡. เชกเซ‹เช•เชฐเชฎเชพเช‚ เช˜เชฃเชพ เชชเซเชฐเช•เชพเชฐเชจเชพ เชจเซ‡เชŸเชตเชฐเซเช• เช›เซ‡, เช…เชจเซ‡ เช…เชฎเซ‡ เชคเซ‡เชฎเชพเช‚เชจเชพ เชธเซŒเชฅเซ€ เช†เชฆเชฟเชฎ - เชฌเซเชฐเชฟเชœเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช, เชœเซ‡ เชคเชฎเชจเซ‡ เชธเชฎเชพเชจ เชนเซ‹เชธเซเชŸ เชชเชฐ เชšเชพเชฒเชคเชพ เช•เชจเซเชŸเซ‡เชจเชฐเชจเซ‡ เชจเซ‡เชŸเชตเชฐเซเช• เช•เชฐเชตเชพเชจเซ€ เชฎเช‚เชœเซ‚เชฐเซ€ เช†เชชเซ‡ เช›เซ‡. เชšเชพเชฒเซ‹ เชจเซ€เชšเซ‡เชจเชพ เช†เชฆเซ‡เชถ เชธเชพเชฅเซ‡ เชจเซ‡เชŸเชตเชฐเซเช• เชฌเชจเชพเชตเซ€เช:

docker network create msvc-network

เช†เช—เชณ, เชšเชพเชฒเซ‹ เช‡เชฎเซ‡เชœ microservices-backend:1.0.0 เชธเชพเชฅเซ‡ 'backend' เชจเชพเชฎเชจเซเช‚ เชฌเซ‡เช•เชเชจเซเชก เช•เชจเซเชŸเซ‡เชจเชฐ เชฒเซ‹เช‚เชš เช•เชฐเซ€เช:

docker run -dit --name backend --network msvc-net microservices-backend:1.0.0

เชคเซ‡ เชจเซ‹เช‚เชงเชตเซเช‚ เชฏเซ‹เช—เซเชฏ เช›เซ‡ เช•เซ‡ เชฌเซเชฐเชฟเชœ เชจเซ‡เชŸเชตเชฐเซเช• เชคเซ‡เชฎเชจเชพ เชจเชพเชฎ เชฆเซเชตเชพเชฐเชพ เช•เชจเซเชŸเซ‡เชจเชฐ เชฎเชพเชŸเซ‡ เชฌเซ‰เช•เซเชธเชจเซ€ เชฌเชนเชพเชฐ เชธเซ‡เชตเชพเชจเซ€ เชถเซ‹เชง เชชเซ‚เชฐเซ€ เชชเชพเชกเซ‡ เช›เซ‡. เชเชŸเชฒเซ‡ เช•เซ‡, เชฌเซ‡เช•เชเชจเซเชก เชธเซ‡เชตเชพ เชกเซ‹เช•เชฐ เชจเซ‡เชŸเชตเชฐเซเช•เชฎเชพเช‚ เชชเชฐ เช‰เชชเชฒเชฌเซเชง เชนเชถเซ‡ http://backend:8080.

เชšเชพเชฒเซ‹ เช—เซ‡เชŸเชตเซ‡ เชถเชฐเซ‚ เช•เชฐเซ€เช:

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เชฎเชพเช‚เชฅเซ€ เช—เซเชฃเชงเชฐเซเชฎเซ‹เชจเซ‡ เช“เชตเชฐเชฐเชพเช‡เชก เช•เชฐเชถเซ‡.

เชฒเซ‹เชจเซเชš เช•เชฐเซเชฏเชพ เชชเช›เซ€, เช•เซ‰เชฒ เช•เชฐเซ‹ http://localhost/ เช…เชจเซ‡ เช–เชพเชคเชฐเซ€ เช•เชฐเซ‹ เช•เซ‡ เชฌเชงเซเช‚ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡, เช…เช—เชพเช‰เชจเชพ เช•เซ‡เชธเชจเซ€ เชœเซ‡เชฎ.

เชจเชฟเชทเซเช•เชฐเซเชท

เชชเชฐเชฟเชฃเชพเชฎเซ‡, เช…เชฎเซ‡ เชฌเซ‡ เชธเชฐเชณ เชฎเชพเช‡เช•เซเชฐเซ‹ เชธเชฐเซเชตเชฟเชธเซ€เชธ เชฌเชจเชพเชตเซ€, เชคเซ‡เชฎเชจเซ‡ เชกเซ‹เช•เชฐ เช•เชจเซเชŸเซ‡เชจเชฐเชฎเชพเช‚ เชชเซ‡เช• เช•เชฐเซเชฏเชพ เช…เชจเซ‡ เชเช• เชœ เชฎเชถเซ€เชจ เชชเชฐ เชเช•เชธเชพเชฅเซ‡ เชฒเซ‹เชจเซเชš เช•เชฐเซเชฏเชพ. เชชเชฐเชฟเชฃเชพเชฎเซ€ เชธเชฟเชธเซเชŸเชฎเชฎเชพเช‚, เชœเซ‹เช•เซ‡, เชธเช‚เช–เซเชฏเชพเชฌเช‚เชง เช—เซ‡เชฐเชซเชพเชฏเชฆเชพ เช›เซ‡:

  • เชจเชฌเชณเซ€ เช–เชพเชฎเซ€ เชธเชนเชจเชถเซ€เชฒเชคเชพ - เช…เชฎเชพเชฐเชพ เชฎเชพเชŸเซ‡ เชเช• เชธเชฐเซเชตเชฐ เชชเชฐ เชฌเชงเซเช‚ เช•เชพเชฎ เช•เชฐเซ‡ เช›เซ‡
  • เชจเชฌเชณเซ€ เชฎเชพเชชเชจเซ€เชฏเชคเชพ - เชœเซ‡เชฎ เชœเซ‡เชฎ เชฒเซ‹เชก เชตเชงเซ‡ เช›เซ‡, เชคเซ‡เชฎ เชคเซ‡เชฎ เชตเชงเชพเชฐเชพเชจเซ€ เชธเซ‡เชตเชพเชจเชพ เชฆเชพเช–เชฒเชพเช“ เช†เชชเชฎเซ‡เชณเซ‡ เชœเชฎเชพเชตเชตเชพเชฎเชพเช‚ เช…เชจเซ‡ เชคเซ‡เชฎเชจเซ€ เชตเชšเซเชšเซ‡เชจเชพ เชญเชพเชฐเชจเซ‡ เชธเช‚เชคเซเชฒเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชธเชฐเชธ เชฐเชนเซ‡เชถเซ‡.
  • เชฒเซ‹เชจเซเชš เชœเชŸเชฟเชฒเชคเชพ - เช…เชฎเชพเชฐเซ‡ เชšเซ‹เช•เซเช•เชธ เชชเชฐเชฟเชฎเชพเชฃเซ‹ เชธเชพเชฅเซ‡ เช“เช›เชพเชฎเชพเช‚ เช“เช›เชพ 3 เช†เชฆเซ‡เชถเซ‹ เชฆเชพเช–เชฒ เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ (เช† เชซเช•เซเชค 2 เชธเซ‡เชตเชพเช“ เชฎเชพเชŸเซ‡ เช›เซ‡)

เช‰เชชเชฐเซ‹เช•เซเชค เชธเชฎเชธเซเชฏเชพเช“ เช‰เช•เซ‡เชฒเชตเชพ เชฎเชพเชŸเซ‡, เชกเซ‹เช•เชฐ เชธเซเชตเซ‹เชฐเซเชฎ, เชจเซ‹เชฎเซ‡เชก, เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช…เชฅเชตเชพ เช“เชชเชจเชถเชฟเชซเซเชŸ เชœเซ‡เชตเชพ เช˜เชฃเชพ เช‰เช•เซ‡เชฒเซ‹ เช›เซ‡. เชœเซ‹ เช†เช–เซ€ เชธเชฟเชธเซเชŸเชฎ เชœเชพเชตเชพเชฎเชพเช‚ เชฒเช–เซ‡เชฒเซ€ เชนเซ‹เชฏ, เชคเซ‹ เชคเชฎเซ‡ เชธเซเชชเซเชฐเชฟเช‚เช— เช•เซเชฒเชพเช‰เชก เชคเชฐเชซ เชœเซ‹เชˆ เชถเช•เซ‹ เช›เซ‹ (เชธเชพเชฐเซ‹ เชฒเซ‡เช–).

ะ’ เช†เช—เชณเชจเซ‹ เชญเชพเช— เชนเซเช‚ เชคเชฎเชจเซ‡ เชœเชฃเชพเชตเซ€เชถ เช•เซ‡ เชฎเซ‡เช‚ เช•เซเชฌเชฐเชจเซ‡เชŸเซเชธ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชธเซ‡เชŸ เช•เชฐเซเชฏเซเช‚ เช…เชจเซ‡ เชชเซเชฐเซ‹เชœเซ‡เช•เซเชŸเชจเซ‡ Google Kubernetes Engine เชชเชฐ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช—เซ‹เช เชตเซเชฏเซ‹.

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹