Dengan peningkatan pengkomputeran awan dan data besar, seni bina perkhidmatan mikro digunakan secara meluas dalam sistem perusahaan. Sebagai alat pelaksanaan penting untuk seni bina perkhidmatan mikro, Spring Cloud menyediakan pelbagai penyelesaian untuk merealisasikan komunikasi di bawah seni bina perkhidmatan mikro. Artikel ini akan menumpukan pada penyelesaian komunikasi mesej tak segerak di bawah perkhidmatan mikro Spring Cloud, dengan harapan dapat memberikan beberapa idea dan rujukan untuk semua orang untuk menyelesaikan masalah komunikasi mesej di bawah seni bina perkhidmatan mikro.
1. Latar belakang komunikasi mesej tak segerak perkhidmatan mikro
Di bawah seni bina perkhidmatan mikro, perkhidmatan dibahagikan kepada berbilang perkhidmatan mikro untuk pembangunan bebas, penggunaan bebas dan penyelenggaraan bebas mesti ada. Panggilan RPC tradisional atau permintaan HTTP akan merendahkan prestasi sistem disebabkan masa tindak balas yang panjang dalam senario data besar dan tinggi Oleh itu, komunikasi mesej tak segerak digunakan secara meluas dalam perkhidmatan mikro sebagai penyelesaian yang sangat baik, dengan cekap menyokong Komunikasi antara perkhidmatan mikro yang berbeza.
2. Penyelesaian komunikasi mesej tak segerak di bawah Spring Cloud
Dalam Spring Cloud, terdapat dua penyelesaian komunikasi mesej tak segerak yang biasa digunakan: Spring Cloud Stream dan Spring Cloud Bus.
Spring Cloud Stream ialah rangka kerja yang disediakan oleh Spring Cloud untuk membina perkhidmatan mikro dipacu mesej. Ia dibina pada Spring Boot dan Spring Integration dan boleh menyambungkan pelbagai perkhidmatan broker mesej dengan mudah. Spring Cloud Stream melaksanakan komunikasi mesej tak segerak berdasarkan model terbitkan/langgan (Terbitkan/Langgan).
Aliran kerja Spring Cloud Stream adalah seperti berikut:
① Pengeluar menjana mesej dan menerbitkannya ke Spring Cloud Stream
② Spring Cloud Stream menghantar mesej kepada broker perantaraan; Message Broker);
③ Pengguna melanggan maklumat daripada ejen perantara dan memberitahu Spring Cloud Stream apabila ia menerima mesej Spring Cloud Stream kemudian menghantar mesej kepada pengguna yang sepadan.
Spring Cloud Stream menggunakan perkhidmatan broker mesej seperti Apache Kafka dan RabbitMQ, yang mempunyai ciri-ciri kebolehpercayaan yang tinggi, konkurensi yang tinggi dan kebolehskalaan yang tinggi. Proses penggunaannya sangat mudah Anda hanya perlu memperkenalkan kebergantungan yang sepadan dan mengkonfigurasi ejen mesej yang digunakannya. Kod sampel untuk melaksanakan perkhidmatan mesej adalah seperti berikut:
// 引入Spring Cloud Stream依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-kafka</artifactId> </dependency> // 在应用程序属性文件中设置连接的kafka代理 spring.cloud.stream.kafka.binder.brokers=kafka.example.com:9092 spring.cloud.stream.kafka.binder.zkNodes=zookeeper.example.com spring.cloud.stream.kafka.binder.defaultBrokerPort=9092 spring.cloud.stream.kafka.binder.defaultZkPort=2181
Spring Cloud Bus ialah mekanisme untuk menyebarkan perubahan keadaan dalam sistem yang diedarkan boleh Biarkan mesej berlalu antara pelbagai perkhidmatan mikro yang membentuk sistem. Bas Awan Musim Bunga menggunakan broker mesej untuk menyambungkan pelbagai perkhidmatan mikro dan menggunakan jenis mesej ringan untuk melengkapkan penghantaran status acara. Berbeza daripada Spring Cloud Stream, Spring Cloud Bus lebih banyak digunakan untuk pemesejan dan perkongsian keadaan dalam sistem.
Aliran kerja Bas Awan Musim Bunga adalah seperti berikut:
① Peristiwa pencetus yang boleh menjejaskan keadaan pada Bas Awan Musim Bunga melalui permintaan HTTP/HTTPS (contohnya: kaedah POST, kaedah PATCH atau kaedah DELETE) ;
② Spring Cloud Bus menerima permintaan acara dan menyimpan kandungan acara
③ Menyiarkan status acara dalam Spring Cloud Bus ke seluruh sistem yang diedarkan melalui ejen mesej; mesej Status acara dalam ejen, dan secara serentak menukar statusnya sendiri dalam masa nyata apabila status acara berubah.
// 添加依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency> // 在应用程序属性文件中设置RabbitMQ地址 spring.rabbitmq.host=localhost spring.rabbitmq.virtual-host=/ spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest
Atas ialah kandungan terperinci Komunikasi mesej tak segerak di bawah perkhidmatan mikro Spring Cloud. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!