เชนเซ เชนเชฌเชฐ.
เช เชฒเซเชเชฎเชพเช, เชนเซเช เชฎเชพเชเชเซเชฐเซเชธเชฐเซเชตเชฟเชธเชฟเชธ เชธเชพเชฅเซ เชชเซเชฐเชฏเซเช เชเชฐเชตเชพ เชฎเชพเชเซ เชถเซเชเชตเชพเชจเซเช เชตเชพเชคเชพเชตเชฐเชฃ เชฌเชจเชพเชตเชตเชพเชจเชพ เชฎเชพเชฐเชพ เช เชจเซเชญเชต เชตเชฟเชถเซ เชตเชพเชค เชเชฐเชตเชพ เชฎเชพเชเชเซ เชเซเช. เชฆเชฐเซเช เชจเชตเซเช เชธเชพเชงเชจ เชถเซเชเชคเซ เชตเชเชคเซ, เชนเซเช เชนเชเชฎเซเชถเชพ เชคเซเชจเซ เชฎเชพเชคเซเชฐ เชฎเชพเชฐเชพ เชธเซเชฅเชพเชจเชฟเช เชฎเชถเซเชจ เชชเชฐ เช เชจเชนเซเช, เชชเชฃ เชตเชงเซ เชตเชพเชธเซเชคเชตเชฟเช เชชเชฐเชฟเชธเซเชฅเชฟเชคเชฟเชเชฎเชพเช เชชเชฃ เช เชเชฎเชพเชตเชตเชพ เชฎเชพเชเชเชคเซ เชนเชคเซ. เชคเซเชฅเซ, เชฎเซเช เชเช เชธเชฐเชณ เชฎเชพเชเชเซเชฐเซเชธเชฐเซเชตเชฟเชธ เชเชชเซเชฒเชฟเชเซเชถเชจ เชฌเชจเชพเชตเชตเชพเชจเซเช เชจเชเซเชเซ เชเชฐเซเชฏเซเช, เชเซ เชชเชเซเชฅเซ เชคเชฎเชพเชฎ เชชเซเชฐเชเชพเชฐเชจเซ เชฐเชธเชชเซเชฐเชฆ เชคเชเชจเซเชเซ เชธเชพเชฅเซ "เชนเชเช" เชฅเช เชถเชเซ เชเซ. เชชเซเชฐเซเชเซเชเซเช เชฎเชพเชเซเชจเซ เชฎเซเชเซเชฏ เชเชตเชถเซเชฏเชเชคเชพ เช เชตเชพเชธเซเชคเชตเชฟเช เชธเชฟเชธเซเชเชฎเชจเซ เชคเซเชจเซ เชฎเชนเชคเซเชคเชฎ เชเชพเชฐเซเชฏเชพเชคเซเชฎเช เชจเชฟเชเชเชคเชพ เชเซ.
เชถเชฐเซเชเชคเชฎเชพเช, เชฎเซเช เชชเซเชฐเซเชเซเชเซเชเชจเซ เชฐเชเชจเชพเชจเซ เชเชฃเชพ เชชเชเชฒเชพเชเชฎเชพเช เชตเชฟเชญเชพเชเชฟเชค เชเชฐเซ:
-
เชฌเซ เชธเซเชตเชพเช เชฌเชจเชพเชตเซ - 'เชฌเซเชเชเชจเซเชก' เช เชจเซ 'เชเซเชเชตเซ', เชคเซเชฎเชจเซ เชกเซเชเชฐ เชเชฎเซเชเซเชธเชฎเชพเช เชชเซเช เชเชฐเซ เช เชจเซ เชคเซเชฎเชจเซ เชเชเชธเชพเชฅเซ เชเชพเชฎ เชเชฐเชตเชพ เชฎเชพเชเซ เชเซเช เชตเซ
เชเซเชตเชฐเซเชกเซเชธ: เชเชพเชตเชพ 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")
เชฌเชงเซเช เชเชพเชฎ เชเชฐเซ เชฐเชนเซเชฏเซเช เชเซ. เชธเชเซเชค เชตเชพเชเช เชจเซเชเชง เชเชฐเชถเซ เชเซ เชเซเชเชตเซเชจเซ เชฌเชพเชฏเชชเชพเชธ เชเชฐเซเชจเซ, เชฌเซเชเชเชจเซเชกเชจเซ เชธเซเชงเชพ เช เชเชเซเชธเซเชธ เชเชฐเชตเชพเชฅเซ เช
เชฎเชจเซ เชเชเชเชชเชฃ เช
เชเชเชพเชตเชคเซเช เชจเชฅเซ (
เชเชชเชฐเชพเชเชค, เชฌเชเชจเซ เชธเซเชตเชพเช เชธเชฎเชพเชจ เชซเชพเชเชฒ เชธเชฟเชธเซเชเชฎ เชถเซเชฐ เชเชฐเซ เชเซ, เชฅเซเชฐเซเชกเซ เชเชจเชฐเซเช เชเชฐเซ เชเซ เช
เชจเซ เชเช เชธเชฎเชฏเซ เชเชเชฌเซเชเชพ เชธเชพเชฅเซ เชฆเชเชฒ เชเชฐเชตเชพเชจเซเช เชถเชฐเซ เชเชฐเซ เชถเชเซ เชเซ. เช
เชฎเชพเชฐเซ เชฎเชพเชเชเซเชฐเซเชธเชฐเซเชตเชฟเชธเชฟเชธเชจเซ เช
เชฒเช เชเชฐเชตเซ เชธเชฐเชธ เชฐเชนเซเชถเซ. เช เชตเชฟเชตเชฟเชง เชฎเชถเซเชจเซ (เชเชฃเชพ เชชเซเชธเชพ, เชฎเซเชถเซเชเซเชฒ), เชตเชฐเซเชเซเชฏเซเช
เชฒ เชฎเชถเซเชจเซ (เชธเชเชธเชพเชงเชจ-เชธเชเชจ, เชฒเชพเชเชฌเชพ เชธเซเชเชพเชฐเซเชเช
เชช) เชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เช
เชฅเชตเชพ เชเชจเซเชเซเชจเชฐเชพเชเชเซเชถเชจเชจเซ เชเชชเชฏเซเช เชเชฐเซเชจเซ เชเชชเซเชฒเชฟเชเซเชถเชจเซเชธเชจเซเช เชตเชฟเชคเชฐเชฃ เชเชฐเซเชจเซ เชชเซเชฐเชพเชชเซเชค เชเชฐเซ เชถเชเชพเชฏ เชเซ. เช
เชชเซเชเซเชทเชพ เชฎเซเชเชฌ, เช
เชฎเซ เชคเซเชฐเซเชเซ เชตเชฟเชเชฒเซเชช เชชเชธเชเชฆ เชเชฐเซเช เชเซเช เช
เชจเซ
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 เชเซเชฒเชจเซ เชเชชเชฏเซเช เชเชฐเซ เชถเชเซ เชเซ.
เชเชฟเชเซเชเชพเชธเซเช เชฎเชพเชเซ, เชเชฌเซเชจเชพ เชเชฆเชจเซ เชเชเชพเชกเชตเชพเชจเชพ เช
เชญเชฟเชเชฎเซ เชตเชฟเชถเซ เช
เชนเซเช เชเช เชธเชพเชฐเซ เชฒเซเช เชเซ
เช เชเชคเชฟเชฎ เชกเซเชเชฐเชซเชพเชเชฒ:
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
เชคเซ เชจเซเชเชงเชตเซเช เชฏเซเชเซเชฏ เชเซ เชเซ เชฌเซเชฐเชฟเช เชจเซเชเชตเชฐเซเช เชคเซเชฎเชจเชพ เชจเชพเชฎ เชฆเซเชตเชพเชฐเชพ เชเชจเซเชเซเชจเชฐ เชฎเชพเชเซ เชฌเซเชเซเชธเชจเซ เชฌเชนเชพเชฐ เชธเซเชตเชพเชจเซ เชถเซเชง เชชเซเชฐเซ เชชเชพเชกเซ เชเซ. เชเชเชฒเซ เชเซ, เชฌเซเชเชเชจเซเชก เชธเซเชตเชพ เชกเซเชเชฐ เชจเซเชเชตเชฐเซเชเชฎเชพเช เชชเชฐ เชเชชเชฒเชฌเซเชง เชนเชถเซ
เชเชพเชฒเซ เชเซเชเชตเซ เชถเชฐเซ เชเชฐเซเช:
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