Dengan pembangunan pengkomputeran awan dan pengembangan berterusan perniagaan perusahaan, seni bina perkhidmatan mikro telah menjadi seni bina sistem yang sangat popular. Antaranya, Spring Boot dan Spring Cloud merupakan rangka kerja mikroperkhidmatan yang paling biasa digunakan pada masa ini. Spring Cloud menyediakan banyak komponen untuk menyokong pembangunan dan pengurusan perkhidmatan mikro, termasuk pendaftaran dan penemuan perkhidmatan, penghalaan, pengimbangan beban, pengurusan konfigurasi, pemutus litar, dsb.
Dalam artikel ini, kami akan membina sistem terbang perkhidmatan mikro Spring Cloud yang diedarkan dan selamat sebagai satu kes untuk menunjukkan fungsi berkuasa Spring Cloud.
Pertama, kita perlu mendaftar dan menemui perkhidmatan. Spring Cloud menyediakan Eureka untuk membantu kami merealisasikan pendaftaran dan penemuan perkhidmatan. Kami akan melengkapkan pendaftaran dan penemuan perkhidmatan melalui Pelayan Eureka.
Buat aplikasi Eureka Server:
@SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
Konfigurasikan dalam application.properties:
server.port=8761 eureka.client.register-with-eureka=false eureka.client.fetch-registry=false
Dalam penyedia perkhidmatan dan aplikasi pengguna perkhidmatan, kami perlu mendaftarkannya ke Eureka Server.
Dikonfigurasikan dalam aplikasi penyedia perkhidmatan.sifat:
spring.application.name=flight-service-provider server.port=8080 eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
Dikonfigurasikan dalam aplikasi pengguna perkhidmatan.sifat:
spring.application.name=flight-service-consumer server.port=8081 eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
Pembekal perkhidmatan mencipta antara muka RESTful melalui Spring MVC:
@RestController @RequestMapping("/flights") public class FlightController { @GetMapping("/{flightId}") public ResponseEntity<Flight> getFlight(@PathVariable Integer flightId) { Flight flight = new Flight(flightId, "Shanghai", "Beijing", new Date()); return new ResponseEntity<>(flight, HttpStatus.OK); } }
Pengguna perkhidmatan memanggil perkhidmatan melalui Spring RestTemplate:
@Service public class FlightService { @Autowired private RestTemplate restTemplate; @Value("${service.provider.url}") private String serviceProviderUrl; public Flight getFlight(Integer flightId) { return restTemplate.getForObject(serviceProviderUrl + "/flights/{flightId}", Flight.class, flightId); } }
Antaranya, service.provider.url terdapat dalam aplikasi Konfigurasi dalam aplikasi.sifat program.
Dalam aplikasi sebenar, pembekal perkhidmatan mungkin akan digunakan pada berbilang kejadian Dalam kes ini, kami perlu melakukan pengimbangan beban untuk meningkatkan prestasi prestasi dan ketersediaan. Spring Cloud menyediakan Ribbon untuk menyokong pengimbangan beban.
Konfigurasikan dalam aplikasi.sifat pengguna perkhidmatan:
service.provider.url=http://flight-service-provider/ spring.cloud.loadbalancer.ribbon.enabled=true
Gunakan RestTemplate seimbang beban dalam FlightService:
@Service public class FlightService { @Autowired @LoadBalanced private RestTemplate restTemplate; @Value("${service.provider.name}") private String serviceProviderName; public Flight getFlight(Integer flightId) { return restTemplate.getForObject("http://" + serviceProviderName + "/flights/{flightId}", Flight.class, flightId); } }
Di mana, service.provider.name terdapat dalam aplikasi Konfigurasi dalam aplikasi.sifat program.
Spring Cloud menyediakan Config untuk mengurus konfigurasi aplikasi dengan mudah. Kami boleh menyimpan konfigurasi aplikasi dalam repositori Git dan mengedarkannya melalui Pelayan Konfig.
Buat aplikasi Pelayan Config:
@SpringBootApplication @EnableConfigServer public class ConfigServerApplication { public static void main(String[] args) { SpringApplication.run(ConfigServerApplication.class, args); } }
Konfigurasi dalam aplikasi.sifat:
server.port=8888 spring.cloud.config.server.git.uri=https://github.com/xxx/xxx.git spring.cloud.config.server.git.search-paths=config-repo
Dalam penyedia perkhidmatan dan pengguna perkhidmatan, kami boleh mendapatkannya melalui konfigurasi Aplikasi Pelayan Konfig.
Konfigurasikan dalam aplikasi pembekal perkhidmatan.yml:
spring: application: name: flight-service-provider cloud: config: uri: http://localhost:8888 label: master profile: dev
Konfigurasikan dalam aplikasi pengguna perkhidmatan.yml:
spring: application: name: flight-service-consumer cloud: config: uri: http://localhost:8888 label: master profile: dev
Dalam seni bina perkhidmatan mikro, kerana kebergantungan antara perkhidmatan adalah sangat kompleks, masa henti atau masalah dalam sesetengah perkhidmatan boleh menyebabkan keseluruhan sistem runtuh. Untuk menangani situasi ini, kita boleh menggunakan pemutus litar untuk mengendalikan kemerosotan perkhidmatan.
Spring Cloud menyediakan Hystrix untuk menyokong fungsi pemutus litar.
Konfigurasikan dalam application.yml pengguna perkhidmatan:
spring: application: name: flight-service-consumer cloud: config: uri: http://localhost:8888 label: master profile: dev loadbalancer: ribbon: enabled: true circuitbreaker: enabled: true resilience4j: enabled: false circuitBreaker: backend: flight-service-provider failureRateThreshold: 50
Tambah anotasi @HystrixCommand dalam FlightController:
@RestController @RequestMapping("/flights") public class FlightController { @Autowired private FlightService flightService; @GetMapping("/{flightId}") @HystrixCommand(fallbackMethod = "defaultGetFlight") public ResponseEntity<Flight> getFlight(@PathVariable Integer flightId) { Flight flight = flightService.getFlight(flightId); if (flight != null) { return new ResponseEntity<>(flight, HttpStatus.OK); } else { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } } public ResponseEntity<Flight> defaultGetFlight(Integer flightId) { return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); } }
Antaranya, defaultGetFlight ialah fungsi turun taraf.
Dalam sistem yang diedarkan, isu keselamatan adalah sangat penting. Spring Cloud menyediakan Keselamatan untuk menyokong pengurusan keselamatan.
Tambah dalam pom.xml penyedia perkhidmatan dan aplikasi pengguna perkhidmatan:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-security</artifactId> </dependency>
Konfigurasikan dalam application.yml penyedia perkhidmatan dan aplikasi pengguna perkhidmatan:
security: basic: enabled: true spring: security: user: name: user password: password
Antaranya, namakan dan kata laluan ialah nama pengguna dan kata laluan masing-masing. Perlu diingatkan bahawa dalam aplikasi sebenar, kaedah yang lebih selamat mesti digunakan untuk pengesahan pengguna dan pengurusan kebenaran.
Tambah anotasi @PreAuthorize pada peringkat kelas FlightController:
@RestController @RequestMapping("/flights") @PreAuthorize("hasRole('ROLE_ADMIN')") public class FlightController { @Autowired private FlightService flightService; @GetMapping("/{flightId}") public ResponseEntity<Flight> getFlight(@PathVariable Integer flightId) { Flight flight = flightService.getFlight(flightId); if (flight != null) { return new ResponseEntity<>(flight, HttpStatus.OK); } else { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } } }
Antaranya, anotasi @PreAuthorize digunakan untuk melaksanakan pengesahan keselamatan pada FlightController. Dalam aplikasi sebenar, pengesahan keselamatan yang berbeza boleh dilakukan pada setiap kaedah.
Dengan cara ini, kami telah menyelesaikan pembinaan sistem penerbangan mikro perkhidmatan Spring Cloud yang diedarkan dan selamat. Melalui kes dalam artikel ini, kita dapat melihat bahawa Spring Cloud menyediakan banyak komponen untuk membantu kami membina perkhidmatan mikro. Pada masa yang sama, kita juga perlu memberi perhatian kepada beberapa cabaran yang dibawa oleh seni bina perkhidmatan mikro, seperti pendaftaran dan penemuan perkhidmatan, komunikasi antara perkhidmatan, pengimbangan beban, pengurusan konfigurasi, pemutus litar, keselamatan dan isu-isu lain. Dalam aplikasi sebenar, kita perlu membuat pemilihan dan konfigurasi teknologi berdasarkan senario tertentu.
Atas ialah kandungan terperinci Bina sistem penerbangan perkhidmatan mikro Spring Cloud yang diedarkan dan selamat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!