เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เตพ เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เดพเตป เดชเด เดฟเด•เตเด•เตเดจเตเดจเต. เดญเดพเด—เด‚ 1. เดธเตเดชเตเดฐเดฟเด‚เด—เต เดฌเต‚เดŸเตเดŸเตเด‚ เดกเต‹เด•เตเด•เดฑเตเด‚

เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เตพ เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เดพเตป เดชเด เดฟเด•เตเด•เตเดจเตเดจเต. เดญเดพเด—เด‚ 1. เดธเตเดชเตเดฐเดฟเด‚เด—เต เดฌเต‚เดŸเตเดŸเตเด‚ เดกเต‹เด•เตเด•เดฑเตเด‚

เดนเดฒเต‹, เดนเดฌเตเตผ.

เดˆ เดฒเต‡เด–เดจเดคเตเดคเดฟเตฝ, เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เตพ เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต เด’เดฐเต เดชเด เดจ เด…เดจเตเดคเดฐเต€เด•เตเดทเด‚ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจ เดŽเตปเตเดฑเต† เด…เดจเตเดญเดตเดคเตเดคเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เดธเด‚เดธเดพเดฐเดฟเด•เตเด•เดพเตป เดžเดพเตป เด†เด—เตเดฐเดนเดฟเด•เตเด•เตเดจเตเดจเต. เด“เดฐเต‹ เดชเตเดคเดฟเดฏ เดŸเต‚เดณเตเด‚ เดชเด เดฟเด•เตเด•เตเดฎเตเดชเต‹เตพ, เดŽเตปเตเดฑเต† เดฒเต‹เด•เตเด•เตฝ เดฎเต†เดทเต€เดจเดฟเตฝ เดฎเดพเดคเตเดฐเดฎเดฒเตเดฒ, เด•เต‚เดŸเตเดคเตฝ เดฑเดฟเดฏเดฒเดฟเดธเตเดฑเตเดฑเดฟเด•เต เด…เดตเดธเตเดฅเดฏเดฟเดฒเตเด‚ เด…เดคเต เดชเดฐเต€เด•เตเดทเดฟเด•เตเด•เดพเตป เดžเดพเตป เดŽเดชเตเดชเต‹เดดเตเด‚ เด†เด—เตเดฐเดนเดฟเดšเตเดšเต. เด…เดคเดฟเดจเดพเตฝ, เด’เดฐเต เดฒเดณเดฟเดคเดฎเดพเดฏ เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเต เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเตป เดžเดพเตป เดคเต€เดฐเตเดฎเดพเดจเดฟเดšเตเดšเต, เด…เดคเต เดชเดฟเดจเตเดจเต€เดŸเต เดŽเดฒเตเดฒเดพเดคเตเดคเดฐเด‚ เดฐเดธเด•เดฐเดฎเดพเดฏ เดธเดพเด™เตเด•เต‡เดคเดฟเด•เดตเดฟเดฆเตเดฏเด•เดณเตเด‚ เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต "เดคเต‚เด™เตเด™เดฟเด•เตเด•เดฟเดŸเด•เตเด•เดพเดตเตเดจเตเดจเดคเดพเดฃเต". เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเตปเตเดฑเต† เดชเตเดฐเดงเดพเดจ เด†เดตเดถเตเดฏเด•เดค เดฏเดฅเดพเตผเดคเตเดฅ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเต‹เดŸเตเดณเตเดณ เด…เดคเดฟเตปเตเดฑเต† เดชเดฐเดฎเดพเดตเดงเดฟ เดชเตเดฐเดตเตผเดคเตเดคเดจเดชเดฐเดฎเดพเดฏ เดธเดพเดฎเต€เดชเตเดฏเดฎเดพเดฃเต.

เดคเตเดŸเด•เตเด•เดคเตเดคเดฟเตฝ, เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเตปเตเดฑเต† เดธเตƒเดทเตเดŸเดฟเดฏเต† เดžเดพเตป เดชเดฒ เด˜เดŸเตเดŸเด™เตเด™เดณเดพเดฏเดฟ เดตเดฟเดญเดœเดฟเดšเตเดšเต:

  1. เดฐเดฃเตเดŸเต เดธเต‡เดตเดจเด™เตเด™เตพ เดธเตƒเดทเตโ€ŒเดŸเดฟเด•เตเด•เตเด• - 'เดฌเดพเด•เตเด•เต†เตปเดกเต', 'เด—เต‡เดฑเตเดฑเตโ€Œเดตเต‡', เด…เดตเดฏเต† เดกเต‹เด•เตเด•เตผ เด‡เดฎเต‡เดœเตเด•เดณเดพเดฏเดฟ เดชเดพเด•เตเด•เต เดšเต†เดฏเตโ€Œเดคเต เด’เดฐเตเดฎเดฟเดšเตเดšเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เดพเตป เด•เต‹เตบเดซเดฟเด—เตผ เดšเต†เดฏเตเดฏเตเด•

    เด•เต€เดตเต‡เดกเตเด•เตพ: เดœเดพเดต 11, เดธเตเดชเตเดฐเดฟเด‚เด—เต เดฌเต‚เดŸเตเดŸเต, เดกเต‹เด•เตเด•เตผ, เด‡เดฎเต‡เดœเต เด’เดชเตเดฑเตเดฑเดฟเดฎเตˆเดธเต‡เดทเตป

  2. Google Kubernetes เดŽเดžเตเดšเดฟเดจเดฟเดฒเต† Kubernetes เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตปเตเดฑเต†เดฏเตเด‚ เดตเดฟเดจเตเดฏเดพเดธ เดธเด‚เดตเดฟเดงเดพเดจเดคเตเดคเดฟเตปเตเดฑเต†เดฏเตเด‚ เดตเดฟเด•เดธเดจเด‚

    เด•เต€เดตเต‡เดกเตเด•เตพ: เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต, เดœเดฟเด•เต†เด‡, เดฑเดฟเดธเต‹เดดเตโ€Œเดธเต เดฎเดพเดจเต‡เดœเตโ€Œเดฎเต†เตปเตเดฑเต, เด“เดŸเตเดŸเต‹เดธเตโ€Œเด•เต‡เดฒเดฟเด‚เด—เต, เดฐเดนเดธเตเดฏเด™เตเด™เตพ

  3. เด•เต‚เดŸเตเดคเตฝ เด•เดพเดฐเตเดฏเด•เตเดทเดฎเดฎเดพเดฏ เด•เตเดฒเดธเตเดฑเตเดฑเตผ เดฎเดพเดจเต‡เดœเตเดฎเต†เตปเตเดฑเดฟเดจเดพเดฏเดฟ เดนเต†เตฝเด‚ 3 เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด’เดฐเต เดšเดพเตผเดŸเตเดŸเต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเด•

    เด•เต€เดตเต‡เดกเตเด•เตพ: เดนเต†เตฝเด‚ 3, เดšเดพเตผเดŸเตเดŸเต เดตเดฟเดจเตเดฏเดพเดธเด‚

  4. เด•เตเดฒเดธเตเดฑเตเดฑเดฑเดฟเดฒเต‡เด•เตเด•เต เดธเตเดตเดฏเดฎเต‡เดต เด•เต‹เดกเต เดกเต†เดฒเดฟเดตเตผ เดšเต†เดฏเตเดฏเตเดจเตเดจเดคเดฟเดจเดพเดฏเดฟ เดœเต†เด™เตเด•เดฟเตปเดธเตเด‚ เดชเตˆเดชเตเดชเต เดฒเตˆเดจเตเด‚ เดธเดœเตเดœเต€เด•เดฐเดฟเด•เตเด•เตเดจเตเดจเต

    เด•เต€เดตเต‡เดกเตเด•เตพ: เดœเต†เตปเด•เดฟเตปเดธเต เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป, เดชเตเดฒเด—เดฟเดจเตเด•เตพ, เดชเตเดฐเดคเตเดฏเต‡เด• เด•เต‹เตบเดซเดฟเด—เดฑเต‡เดทเตป เดถเต‡เด–เดฐเด‚

เด“เดฐเต‹ เด˜เดŸเตเดŸเดคเตเดคเดฟเดจเตเด‚ เด’เดฐเต เดชเตเดฐเดคเตเดฏเต‡เด• เดฒเต‡เด–เดจเด‚ เดธเดฎเตผเดชเตเดชเดฟเด•เตเด•เดพเตป เดžเดพเตป เดชเดฆเตเดงเดคเดฟเดฏเดฟเดŸเตเดจเตเดจเต.

เดˆ เดฒเต‡เด–เดจ เดชเดฐเดฎเตเดชเดฐเดฏเตเดŸเต† เดถเตเดฐเดฆเตเดงเดพเด•เต‡เดจเตเดฆเตเดฐเด‚ เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เตพ เดŽเด™เตเด™เดจเต† เดŽเดดเตเดคเดพเด‚ เดŽเดจเตเดจเดฒเตเดฒ, เดฎเดฑเดฟเดšเตเดšเต เด…เดตเดฏเต† เดŽเด™เตเด™เดจเต† เด’เดฐเตŠเดฑเตเดฑ เดธเดฟเดธเตเดฑเตเดฑเดคเตเดคเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เดพเด‚ เดŽเดจเตเดจเดคเดพเดฃเต. เด‡เดตเดฏเต†เดฒเตเดฒเดพเด‚ เดธเดพเดงเดพเดฐเดฃเดฏเดพเดฏเดฟ เดกเดตเดฒเดชเตเดชเดฑเตเดŸเต† เด‰เดคเตเดคเดฐเดตเดพเดฆเดฟเดคเตเดคเดคเตเดคเดฟเดจเต เดชเตเดฑเดคเตเดคเดพเดฃเต†เด™เตเด•เดฟเดฒเตเด‚, เด…เดตเดฐเตเดฎเดพเดฏเดฟ เด•เตเดฑเดžเตเดžเดคเต 20% เดชเดฐเดฟเดšเดฟเดคเดฎเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต เด‡เดชเตเดชเต‹เดดเตเด‚ เด‰เดชเดฏเต‹เด—เดชเตเดฐเดฆเดฎเดพเดฃเต†เดจเตเดจเต เดžเดพเตป เด•เดฐเตเดคเตเดจเตเดจเต (เดซเดฒเดคเตเดคเดฟเตปเตเดฑเต† 80% เด‡เดคเต เด•เดฃเด•เตเด•เดพเด•เตเด•เตเดจเตเดจเต). เดฐเดšเดฏเดฟเดคเดพเดตเดฟเดจเต เด‡เดคเดฟเดจเต†เด•เตเด•เตเดฑเดฟเดšเตเดšเต เด•เตเดฑเดšเตเดšเต เดฎเดจเดธเตเดธเดฟเดฒเดพเด•เตเดจเตเดจเดคเดฟเดจเดพเตฝ, เดธเตเดฐเด•เตเดท เดชเต‹เดฒเตเดณเตเดณ เดตเดณเดฐเต† เดชเตเดฐเดงเดพเดจเดชเตเดชเต†เดŸเตเดŸ เดšเดฟเดฒ เดตเดฟเดทเดฏเด™เตเด™เตพ เดˆ เดชเตเดฐเต‹เดœเด•เตเดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เด’เดดเดฟเดตเดพเด•เตเด•เดชเตเดชเต†เดŸเตเด‚; เดธเดฟเดธเตเดฑเตเดฑเด‚ เดตเตเดฏเด•เตเดคเดฟเด—เดค เด‰เดชเดฏเต‹เด—เดคเตเดคเดฟเดจเต เดฎเดพเดคเตเดฐเดฎเดพเดฏเดฟ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดชเตเดชเต†เดŸเตเดจเตเดจเต. เดเดคเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด™เตเด™เดณเต†เดฏเตเด‚ เดธเตƒเดทเตเดŸเดฟเดชเดฐเดฎเดพเดฏ เดตเดฟเดฎเตผเดถเดจเด™เตเด™เดณเต†เดฏเตเด‚ เดžเดพเตป เดธเตเดตเดพเด—เดคเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต.

เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต

เดธเตเดชเตเดฐเดฟเด‚เด—เต เดฌเต‚เดŸเตเดŸเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดœเดพเดต 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). เด‡เดคเต เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดธเต‡เดตเดจเด™เตเด™เตพ เด’เดฐเต เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เดฟเดฒเต‡เด•เตเด•เต เด•เต‚เดŸเตเดŸเดฟเดšเตเดšเต‡เตผเด•เตเด•เดฃเด‚, เด•เต‚เดŸเดพเดคเต† เด—เต‡เดฑเตเดฑเตโ€Œเดตเต‡ เดฎเดพเดคเตเดฐเดฎเต‡ เดชเตเดฑเดคเตเดคเต "เด’เดŸเตเดŸเดฟเดจเดฟเตฝเด•เตเด•เต‚".
เด•เต‚เดŸเดพเดคเต†, เดฐเดฃเตเดŸเต เดธเต‡เดตเดจเด™เตเด™เดณเตเด‚ เด’เดฐเต‡ เดซเดฏเตฝ เดธเดฟเดธเตเดฑเตเดฑเด‚ เดชเด™เตเด•เดฟเดŸเตเดจเตเดจเต, เดคเตเดฐเต†เดกเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด’เดฐเต เด˜เดŸเตเดŸเดคเตเดคเดฟเตฝ เดชเดฐเดธเตเดชเดฐเด‚ เด‡เดŸเดชเต†เดŸเดพเตป เดคเตเดŸเด™เตเด™เตเด‚. เดžเด™เตเด™เดณเตเดŸเต† เดฎเตˆเด•เตเดฐเต‹เดธเตผเดตเต€เดธเตเด•เดณเต† เด’เดฑเตเดฑเดชเตเดชเต†เดŸเตเดคเตเดคเตเดจเตเดจเดคเต เดจเดจเตเดจเดพเดฏเดฟเดฐเดฟเด•เตเด•เตเด‚. เดตเตเดฏเดคเตเดฏเดธเตโ€Œเดค เดฎเต†เดทเต€เดจเตเด•เดณเดฟเตฝ (เดงเดพเดฐเดพเดณเด‚ เดชเดฃเด‚, เดฌเตเดฆเตเดงเดฟเดฎเตเดŸเตเดŸเต), เดตเต†เตผเดšเตเดตเตฝ เดฎเต†เดทเต€เดจเตเด•เตพ (เดฑเดฟเดธเต‹เดดเตโ€Œเดธเต-เด‡เตปเตเดฑเตปเดธเต€เดตเต, เดฒเต‹เด‚เด—เต เดธเตเดฑเตเดฑเดพเตผเดŸเตเดŸเดชเตเดชเต) เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเตˆเดธเต‡เดทเตป เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เด…เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด•เตพ เดตเดฟเดคเดฐเดฃเด‚ เดšเต†เดฏเตโ€Œเดคเต เด‡เดคเต เดจเต‡เดŸเดพเดจเดพเด•เตเด‚. เดชเตเดฐเดคเต€เด•เตเดทเดฟเดšเตเดšเดคเตเดชเต‹เดฒเต†, เดžเด™เตเด™เตพ เดฎเต‚เดจเตเดจเดพเดฎเดคเตเดคเต† เด“เดชเตเดทเตป เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เตเดจเตเดจเต เดกเต‹เด•เตเด•เตผ เด•เดฃเตเดŸเต†เดฏเตเดจเดฑเตˆเดธเต‡เดทเดจเตเดณเตเดณ เด’เดฐเต เด‰เดชเด•เดฐเดฃเดฎเดพเดฏเดฟ.

เดกเต‹เด•เตเด•เตผ

เดšเตเดฐเตเด•เตเด•เดคเตเดคเดฟเตฝ, เดกเต‹เด•เตเด•เตผ เด’เดฑเตเดฑเดชเตเดชเต†เดŸเตเดŸ เด•เดฃเตเดŸเต†เดฏเตเดจเดฑเตเด•เตพ เดธเตƒเดทเตเดŸเดฟเด•เตเด•เตเดจเตเดจเต, เด“เดฐเต‹ เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเดจเตเด‚. เดกเต‹เด•เตเด•เตผ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดจเดฟเด™เตเด™เตพ เด’เดฐเต เดกเต‹เด•เตเด•เตผเดซเดฏเตฝ เดŽเดดเตเดคเต‡เดฃเตเดŸเดคเตเดฃเตเดŸเต - เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเด‚ เดชเตเดฐเดตเตผเดคเตเดคเดฟเดชเตเดชเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเตเดฎเตเดณเตเดณ เดจเดฟเตผเดฆเตเดฆเต‡เดถเด™เตเด™เตพ. เด…เดŸเตเดคเตเดคเดคเดพเดฏเดฟ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดšเดฟเดคเตเดฐเด‚ เดจเดฟเตผเดฎเตเดฎเดฟเด•เตเด•เดพเดจเตเด‚ เด‡เดฎเต‡เดœเต เดฐเดœเดฟเดธเตเดŸเตเดฐเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เด…เดชเตโ€Œเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเดจเตเด‚ เด•เดดเดฟเดฏเตเด‚ (เดจเดฎเตเดชเตผ. เดกเต‹เด•เตเด•เตผเดนเดฌเต) เด•เต‚เดŸเดพเดคเต† เด’เดฐเต เด•เดฎเดพเตปเดกเดฟเตฝ เดเดคเต†เด™เตเด•เดฟเดฒเตเด‚ เดกเต‹เด•เตเด•เดฑเตˆเดธเตเดกเต เดชเดฐเดฟเดคเดธเตเดฅเดฟเดคเดฟเดฏเดฟเตฝ เดจเดฟเด™เตเด™เดณเตเดŸเต† เดฎเตˆเด•เตเดฐเต‹ เดธเตผเดตเต€เดธเต เดตเดฟเดจเตเดฏเดธเดฟเด•เตเด•เตเด•.

Dockerfile

เด’เดฐเต เดšเดฟเดคเตเดฐเดคเตเดคเดฟเตปเตเดฑเต† เดเดฑเตเดฑเดตเตเด‚ เดชเตเดฐเดงเดพเดจเดชเตเดชเต†เดŸเตเดŸ เดธเดตเดฟเดถเต‡เดทเดคเด•เดณเดฟเดฒเตŠเดจเตเดจเต เด…เดคเดฟเตปเตเดฑเต† เดตเดฒเตเดชเตเดชเดฎเดพเดฃเต. เด’เดฐเต เด•เต‹เด‚เดชเดพเด•เตเดฑเตเดฑเต เด‡เดฎเต‡เดœเต เด’เดฐเต เดฑเดฟเดฎเต‹เดŸเตเดŸเต เดฑเดฟเดชเตเดชเต‹เดธเดฟเดฑเตเดฑเดฑเดฟเดฏเดฟเตฝ เดจเดฟเดจเตเดจเต เดตเต‡เด—เดคเตเดคเดฟเตฝ เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเตเด‚, เด•เตเดฑเดšเตเดšเต เดธเตเดฅเดฒเด‚ เดŽเดŸเตเด•เตเด•เตเด‚, เดจเดฟเด™เตเด™เดณเตเดŸเต† เดธเต‡เดตเดจเด‚ เดตเต‡เด—เดคเตเดคเดฟเตฝ เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด‚. เดเดคเตŠเดฐเต เดšเดฟเดคเตเดฐเดตเตเด‚ เด’เดฐเต เด…เดŸเดฟเดธเตเดฅเดพเดจ เดšเดฟเดคเตเดฐเดคเตเดคเดฟเตปเตเดฑเต† เด…เดŸเดฟเดธเตเดฅเดพเดจเดคเตเดคเดฟเดฒเดพเดฃเต เดจเดฟเตผเดฎเตเดฎเดฟเดšเตเดšเดฟเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเต, เดเดฑเตเดฑเดตเตเด‚ เดšเตเดฐเตเด™เตเด™เดฟเดฏ เด“เดชเตเดทเตป เดคเดฟเดฐเดžเตเดžเต†เดŸเตเด•เตเด•เดพเตป เด‡เดคเต เดถเตเดชเดพเตผเดถ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด’เดฐเต เดจเดฒเตเดฒ เด“เดชเตเดทเตป เด†เตฝเดชเตˆเตป เด†เดฃเต, เดšเตเดฐเตเด™เตเด™เดฟเดฏ เดชเดพเด•เตเด•เต‡เดœเตเด•เดณเตเดณเตเดณ เด’เดฐเต เดชเต‚เตผเดฃเตเดฃ เดฒเดฟเดจเด•เตเดธเต เดตเดฟเดคเดฐเดฃเดฎเดพเดฃเต.

เด†เดฆเตเดฏเด‚, เดจเดฎเตเด•เตเด•เต เด’เดฐเต เดกเต‹เด•เตเด•เตผเดซเดฏเตฝ "เดคเดฒเดฏเดฟเตฝ" เดŽเดดเตเดคเดพเตป เดถเตเดฐเดฎเดฟเด•เตเด•เดพเด‚ (เด‡เดคเตŠเดฐเต เดฎเต‹เดถเด‚ เดฎเดพเตผเด—เดฎเดพเดฃเต†เดจเตเดจเต เดžเดพเตป เด‰เดŸเตป เดชเดฑเดฏเตเด‚, เด…เดคเต เดšเต†เดฏเตเดฏเดฐเตเดคเต):

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) เดฌเดฟเตฝเดกเต เด†เดฐเด‚เดญเดฟเด•เตเด•เตเด•เดฏเตเด‚ เดšเต†เดฏเตเดฏเตเดจเตเดจเต. เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเดฟเดฒเต† เด†เดชเตเดฒเดฟเด•เตเด•เต‡เดทเตป เด…เดคเดฟเตปเตเดฑเต† เดชเต‹เตผเดŸเตเดŸเต 8080 เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดฎเต†เดจเตเดจเต EXPOSE 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 เดฎเดŸเด™เตเด™เต เด•เดจเด‚ เด•เตเดฑเดžเตเดžเต 77 MB เด†เดฏเดฟ. เดฎเต‡เดพเดถเดฎเดฒเตเดฒ. เด…เดคเดฟเดจเตเดถเต‡เดทเด‚, เดชเต‚เตผเดคเตเดคเดฟเดฏเดพเดฏ เดšเดฟเดคเตเดฐเด™เตเด™เตพ เด‡เดฎเต‡เดœเต เดฐเดœเดฟเดธเตเดŸเตเดฐเดฟเดฏเดฟเดฒเต‡เด•เตเด•เต เด…เดชเตโ€Œเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเตป เด•เดดเดฟเดฏเตเด‚, เด…เด™เตเด™เดจเต† เดจเดฟเด™เตเด™เดณเตเดŸเต† เดšเดฟเดคเตเดฐเด™เตเด™เตพ เด‡เตปเตเดฑเตผเดจเต†เดฑเตเดฑเดฟเตฝ เดจเดฟเดจเตเดจเต เดกเต—เตบเดฒเต‹เดกเต เดšเต†เดฏเตเดฏเดพเตป เดฒเดญเตเดฏเดฎเดพเดฃเต.

เดกเต‹เด•เตเด•เดฑเดฟเตฝ เดธเต‡เดตเดจเด™เตเด™เตพ เด’เดฐเตเดฎเดฟเดšเตเดšเต เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจเต

เด†เดฐเด‚เดญเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดžเด™เตเด™เดณเตเดŸเต† เดธเต‡เดตเดจเด™เตเด™เตพ เด’เดฐเต‡ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เดฟเตฝ เด†เดฏเดฟเดฐเดฟเด•เตเด•เดฃเด‚. เดกเต‹เด•เตเด•เดฑเดฟเตฝ เดจเดฟเดฐเดตเดงเดฟ เดคเดฐเด‚ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เตเด•เตพ เด‰เดฃเตเดŸเต, เด…เดตเดฏเดฟเตฝ เดเดฑเตเดฑเดตเตเด‚ เดชเตเดฐเดพเด•เตƒเดคเดฎเดพเดฏเดคเต เดžเด™เตเด™เตพ เด‰เดชเดฏเต‹เด—เดฟเด•เตเด•เตเดจเตเดจเต - เดฌเตเดฐเดฟเดกเตเดœเต, เด’เดฐเต‡ เดนเต‹เดธเตเดฑเตเดฑเดฟเตฝ เดชเตเดฐเดตเตผเดคเตเดคเดฟเด•เตเด•เตเดจเตเดจ เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เด•เดฃเตเดŸเต†เดฏเตโ€Œเดจเดฑเตเด•เตพ เดจเดฟเด™เตเด™เดณเต† เด…เดจเตเดตเดฆเดฟเด•เตเด•เตเดจเตเดจเต. เด‡เดจเดฟเดชเตเดชเดฑเดฏเตเดจเตเดจ เด•เดฎเดพเตปเดกเต เด‰เดชเดฏเต‹เด—เดฟเดšเตเดšเต เดจเดฎเตเด•เตเด•เต เด’เดฐเต เดจเต†เดฑเตเดฑเตโ€Œเดตเตผเด•เตเด•เต เดธเตƒเดทเตเดŸเดฟเด•เตเด•เดพเด‚:

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 เดธเต‡เดตเดจเด™เตเด™เตพเด•เตเด•เต เดฎเดพเดคเตเดฐเด‚)

เดฎเต‡เตฝเดชเตเดชเดฑเดžเตเดž เดชเตเดฐเดถเตเดจเด™เตเด™เตพ เดชเดฐเดฟเดนเดฐเดฟเด•เตเด•เตเดจเตเดจเดคเดฟเดจเต, เดกเต‹เด•เตเด•เตผ เดธเตเดตเดพเด‚, เดจเต‹เดฎเดพเดกเต, เด•เตเดฌเตผเดจเต†เดฑเตเดฑเดธเต เด…เดฒเตเดฒเต†เด™เตเด•เดฟเตฝ เด“เดชเตเดชเตบเดทเดฟเดซเตเดฑเตเดฑเต เดŽเดจเตเดจเดฟเด™เตเด™เดจเต† เดจเดฟเดฐเดตเดงเดฟ เดชเดฐเดฟเดนเดพเดฐเด™เตเด™เดณเตเดฃเตเดŸเต. เดฎเตเดดเตเดตเตป เดธเดฟเดธเตเดฑเตเดฑเดตเตเด‚ เดœเดพเดตเดฏเดฟเตฝ เดŽเดดเตเดคเดฟเดฏเดฟเดŸเตเดŸเตเดฃเตเดŸเต†เด™เตเด•เดฟเตฝ, เดจเดฟเด™เตเด™เตพเด•เตเด•เต เดธเตเดชเตเดฐเดฟเด‚เด—เต เด•เตเดฒเต—เดกเดฟเดฒเต‡เด•เตเด•เต เดจเต‹เด•เตเด•เดพเด‚ (เดจเดฒเตเดฒ เดฒเต‡เด–เดจเด‚).

ะ’ เด…เดŸเตเดคเตเดค เดญเดพเด—เด‚ เดžเดพเตป เดŽเด™เตเด™เดจเต†เดฏเดพเดฃเต Kubernetes เดธเดœเตเดœเต€เด•เดฐเดฟเดšเตเดšเดคเต†เดจเตเดจเตเด‚ Google Kubernetes เดŽเดžเตเดšเดฟเดจเดฟเดฒเต‡เด•เตเด•เต เดชเตเดฐเตŠเดœเด•เตเดฑเตเดฑเต เดตเดฟเดจเตเดฏเดธเดฟเดšเตเดšเดคเต†เดจเตเดจเตเด‚ เดžเดพเตป เดจเดฟเด™เตเด™เดณเต‹เดŸเต เดชเดฑเดฏเตเด‚.

เด…เดตเดฒเด‚เดฌเด‚: www.habr.com

เด’เดฐเต เด…เดญเดฟเดชเตเดฐเดพเดฏเด‚ เดšเต‡เตผเด•เตเด•เตเด•