Rumah > Java > javaTutorial > teks badan

Amalan pembangunan keupayaan perkhidmatan mikro berdasarkan Spring Cloud

王林
Lepaskan: 2023-06-23 12:04:40
asal
958 orang telah melayarinya

Dengan perkembangan pesat pengkomputeran awan dan teknologi data besar, reka bentuk seni bina dan kaedah pembangunan sistem perusahaan juga sentiasa berubah. Seni bina perkhidmatan mikro adalah salah satu perubahan penting Ia adalah model seni bina yang membahagikan satu aplikasi kepada satu set perkhidmatan kecil Setiap perkhidmatan bekerjasama antara satu sama lain berdasarkan mekanisme komunikasi yang ringan, dengan itu mencapai sistem yang lebih Fleksibel, berskala dan boleh diselenggara. .

Sebagai salah satu rangka kerja perkhidmatan mikro yang paling popular pada masa ini, Spring Cloud menyediakan set lengkap penyelesaian pembangunan perkhidmatan mikro, termasuk penemuan perkhidmatan mikro, konfigurasi, komunikasi, pengimbangan beban, pemutus litar, get laluan API, dsb. Artikel ini akan memperkenalkan amalan pembangunan keupayaan perkhidmatan mikro berdasarkan Spring Cloud, serta beberapa masalah dan penyelesaian yang dihadapi dalam amalan.

1. Prinsip asas seni bina perkhidmatan mikro

Seni bina perkhidmatan mikro ialah corak seni bina yang membahagikan satu aplikasi kepada satu set perkhidmatan kecil Setiap perkhidmatan adalah berdasarkan ringan Mekanisme komunikasi bekerjasama antara satu sama lain untuk mencapai sistem yang lebih fleksibel, berskala dan boleh diselenggara. Prinsip asas seni bina perkhidmatan mikro termasuk:

1 Pemisahan perkhidmatan: Bahagikan satu aplikasi kepada satu set perkhidmatan kecil mengikut kawasan perniagaan atau modul berfungsi, dan setiap perkhidmatan berjalan dan naik taraf secara bebas.

2 Komunikasi perkhidmatan: Perkhidmatan bekerjasama antara satu sama lain berdasarkan mekanisme komunikasi ringan termasuk API RESTful, baris gilir mesej, RPC, dsb.

3. Penemuan dan pendaftaran perkhidmatan: pengurusan kitaran hayat perkhidmatan, termasuk pendaftaran perkhidmatan ke pusat pendaftaran perkhidmatan, penemuan perkhidmatan dan pengimbangan beban, dsb.

4 Pembahagian data: Pisahkan data kepada perkhidmatan yang berbeza melalui pembahagian data untuk memastikan pengasingan data antara perkhidmatan.

5 Operasi dan penyelenggaraan automatik: Realisasikan penggunaan automatik, pemantauan dan penyelenggaraan perkhidmatan melalui alat automatik, meningkatkan kebolehpercayaan dan kebolehselenggaraan sistem.

2. Spring Cloud Microservice Framework

Spring Cloud ialah rangka kerja mikroperkhidmatan berdasarkan Spring Boot, menyediakan satu set lengkap penyelesaian pembangunan perkhidmatan mikro. Spring Cloud termasuk komponen teras berikut:

1 Penemuan dan pendaftaran perkhidmatan: Eureka, Konsul, Penjaga Zoo, dsb.

2. Pengimbangan beban pelanggan: Reben.

3. Pemutus Litar: Hystrix.

4. Gerbang perkhidmatan: Zuul2.

5. Pusat konfigurasi teragih: Spring Cloud Config.

6. Bas mesej: Bas Awan Musim Bunga.

3. Amalan pembangunan mikroperkhidmatan Spring Cloud

Berikut mengambil aplikasi perkhidmatan mikro ringkas sebagai contoh untuk memperkenalkan amalan pembangunan mikroperkhidmatan berdasarkan Spring Cloud.

1. Buat pusat pendaftaran Eureka

Pertama, buat pusat pendaftaran Eureka untuk merealisasikan penemuan perkhidmatan dan pendaftaran melalui Eureka.

Dalam projek Spring Boot, integrasikan Eureka dengan menambahkan kebergantungan berikut:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
Salin selepas log masuk

Tambah anotasi @EnableEurekaServer dalam kelas permulaan:

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {
   public static void main(String[] args) {
      SpringApplication.run(EurekaServerApplication.class, args);
   }
}
Salin selepas log masuk

Selepas memulakan pusat pendaftaran Eureka , anda boleh Lawati http://localhost:8761 dalam penyemak imbas untuk melihat antara muka pengurusan pusat pendaftaran.

2. Cipta penyedia perkhidmatan

Buat pembekal perkhidmatan ringkas yang menyediakan antara muka helo untuk mengembalikan rentetan.

Dalam projek Spring Boot, integrasikan Eureka dan Ribbon dengan menambahkan kebergantungan berikut:

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
Salin selepas log masuk
Salin selepas log masuk

Dalam penyedia perkhidmatan, dayakan klien Eureka dengan menambahkan anotasi @EnableDiscoveryClient:

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceProviderApplication {
   public static void main(String[] args) {
      SpringApplication.run(ServiceProviderApplication.class, args);
   }
}
Salin selepas log masuk

Buat RestController untuk menyediakan antara muka hello:

@RestController
public class HelloController {
   @RequestMapping("/hello")
   public String hello() {
      return "Hello World!";
   }
}
Salin selepas log masuk

3 Cipta pengguna perkhidmatan

Buat pengguna perkhidmatan, hubungi antara muka yang disediakan oleh penyedia perkhidmatan dan capai pengimbangan beban melalui Ribbon.

Dalam projek Spring Boot, integrasikan Eureka dan Ribbon dengan menambahkan kebergantungan berikut:

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
Salin selepas log masuk
Salin selepas log masuk

Dalam pengguna perkhidmatan, dayakan klien Eureka dengan menambahkan anotasi @EnableDiscoveryClient dan anotasi @LoadBalanced Kepada dayakan pengimbangan beban klien Ribbon:

@SpringBootApplication
@EnableDiscoveryClient
public class ServiceConsumerApplication {
   public static void main(String[] args) {
      SpringApplication.run(ServiceConsumerApplication.class, args);
   }
 
   @Bean
   @LoadBalanced
   public RestTemplate restTemplate() {
      return new RestTemplate();
   }
}
Salin selepas log masuk

Buat RestController untuk memanggil antara muka helo penyedia perkhidmatan:

@RestController
public class HelloController {
   @Autowired
   private RestTemplate restTemplate;
 
   @RequestMapping("/hello")
   public String hello() {
      String url = "http://service-provider/hello";
      return restTemplate.getForObject(url, String.class);
   }
}
Salin selepas log masuk

4. Buat get laluan perkhidmatan

Buat get laluan perkhidmatan, Dedahkan semua antara muka perkhidmatan mikro kepada luar dan laksanakan penghalaan, pemajuan dan penapisan melalui Zuul.

Dalam projek Spring Boot, integrasikan Eureka dan Zuul dengan menambahkan kebergantungan berikut:

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
Salin selepas log masuk

Dalam get laluan perkhidmatan, dayakan Zuul dengan menambahkan anotasi @EnableZuulProxy:

@SpringBootApplication
@EnableZuulProxy
public class ApiGatewayApplication {
   public static void main(String[] args) {
      SpringApplication.run(ApiGatewayApplication.class, args);
   }
}
Salin selepas log masuk

Konfigurasikan maklumat penghalaan get laluan dan tambahkan konfigurasi berikut dalam application.yml:

zuul:
  routes:
    service-provider:
      path: /api/**
      serviceId: service-provider
Salin selepas log masuk

5 Cipta pusat konfigurasi

Buat pusat konfigurasi dan urus konfigurasi melalui repositori Git untuk mencapai pengurusan berpusat. dan konfigurasi konfigurasi.

Dalam projek Spring Boot, sepadukan Pelayan Config dengan menambahkan kebergantungan berikut:

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-config-server</artifactId>
</dependency>
Salin selepas log masuk

Dalam pusat konfigurasi, dayakan pusat konfigurasi dengan menambahkan anotasi @EnableConfigServer:

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
   public static void main(String[] args) {
      SpringApplication.run(ConfigServerApplication.class, args);
   }
}
Salin selepas log masuk

Konfigurasikan maklumat gudang Git dan baca peraturan dalam aplikasi.yml:

spring:
  cloud:
    config:
      server:
        git:
          uri: git://http://gitlab.example.com/abc/config-repo.git
          search-paths: '{application}'
  profiles:
    active: native
  paths:
    config.path: /usr/local/config-repo
Salin selepas log masuk

6 Laksanakan pemutus litar perkhidmatan

Buat pemutus litar untuk mengendalikan kemerosotan perkhidmatan apabila pengecualian. atau kegagalan berlaku beroperasi.

Dalam projek Spring Boot, integrasikan Hystrix dengan menambahkan kebergantungan berikut:

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
Salin selepas log masuk

Dalam penyedia perkhidmatan, laksanakan pemutus litar dengan menambahkan anotasi @HystrixCommand:

@RestController
public class HelloController {
   @RequestMapping("/hello")
   @HystrixCommand(fallbackMethod = "fallback")
   public String hello() {
      ...
   }
 
   public String fallback() {
      return "Fallback";
   }
}
Salin selepas log masuk

7. Laksanakan pemantauan perkhidmatan

Wujudkan pusat pemantauan untuk pemantauan dan analisis data antara muka yang disediakan oleh perkhidmatan mikro untuk mencapai pemantauan masa nyata status perkhidmatan.

Dalam projek Spring Boot, sepadukan Hystrix Dashboard dan Turbine dengan menambahkan kebergantungan berikut:

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>
Salin selepas log masuk

在监控中心中,通过添加@EnableHystrixDashboard注解来启用Hystrix Dashboard:

@SpringBootApplication
@EnableHystrixDashboard
public class MonitorCenterApplication {
   public static void main(String[] args) {
      SpringApplication.run(MonitorCenterApplication.class, args);
   }
}
Salin selepas log masuk

在turbine服务提供者中,通过添加@EnableTurbine注解来启用Turbine:

@SpringBootApplication
@EnableTurbine
public class TurbineServerApplication {
   public static void main(String[] args) {
      SpringApplication.run(TurbineServerApplication.class, args);
   }
}
Salin selepas log masuk

在application.yml中配置Turbine的信息:

turbine:
  aggregator:
    clusterConfig: service-consumer
  appConfig: service-consumer,service-provider
  clusterNameExpression: new String("default")
Salin selepas log masuk

四、总结

Spring Cloud是一套完备的微服务开发解决方案,通过其提供的一系列组件和架构设计原则,开发者可以轻松构建出高可用、高扩展和易维护的微服务应用。在实践中,我们发现Spring Cloud不但提供了完备的技术支持,同时还提供了很好的学习资源和社区支持,为微服务的发展贡献了不少力量。但是,在实践中也会遇到不少问题和挑战,包括配置管理、调用链跟踪、数据一致性等方面,需要我们不断地进行探索和实践,以解决这些难题。

Atas ialah kandungan terperinci Amalan pembangunan keupayaan perkhidmatan mikro berdasarkan Spring Cloud. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!