Dalam proses pengembangan menggunakan springboot, kita sering perlu berurusan dengan skenario di mana layanan dimulai, status layanan perlu didaftarkan dengan pusat pendaftaran layanan (seperti ZK), sehingga ketika status layanan berubah, penghapusan kegagalan dan penyeimbangan beban dapat dilakukan.
Saya telah menemukan dua cara untuk mendaftar:
1. Daftar langsung setelah aplikasi web Spring dimulai;
2. Setelah wadah servlet dimulai, daftar melalui pendengar.
Artikel ini menggunakan demo untuk menggambarkan dua metode pendaftaran ini, menggunakan skema pendaftaran tradisional dengan ZK.
1. Daftar setelah aplikasi web musim semi dimulai
Mari kita lihat kode terlebih dahulu
@SpringbootApplicationPublic kelas WebApplication {private static final Logger Logger = loggerFactory.getLogger (WebApplication.class); private static volatile boolean is_registry = false; public static void main (string [] args) {applicationContext context = run (webapplication.class, args); if (is_registry) {logger.info ("register 2: setelah aplikasi web dimulai"); Zkclient zkclient = context.getBean (zkclient.class); zkclient.register (); Is_registry = true; Logger.info ("Daftar 2: Pendaftaran berhasil"); }}}Di sini, kami mendapatkan ZKClient dalam aplikasi web dan mendaftar.
Perlu dicatat di sini bahwa kami menggunakan ApplicationContext untuk mendapatkan kacang zkclient. Alasannya adalah bahwa Anda tidak dapat menyuntikkan kacang dengan cara autowired selama inisialisasi aplikasi web, karena semua konfigurasi akan dibaca dan kacang diinisialisasi selama startup aplikasi web. Anda tidak dapat menyuntikkan kacang sebelum inisialisasi selesai.
Kode terperinci untuk pendaftaran tidak akan diperluas di sini.
2. Setelah wadah servlet diinisialisasi, daftar melalui pendengar
Atau mulai kode terlebih dahulu
@Weblistenerpublic kelas registerListener mengimplementasikan servletContextListener {logger final terlindungi = loggerFactory.getLogger (this.getClass ()); private static volatile boolean is_registry = false; @Autowired private zkclient zkclient; @Override public void contextInitialized (servletContextEvent servletContextEvent) {coba {if (! Is_registry) {logger.info ("Daftar 1: setelah wadah servlet dimulai dengan sukses"); zkclient.register (); Logger.info ("Daftar 1: Daftar berhasil"); } Is_registry = true; } catch (Exception e) {is_registry = false; logger.info ("Daftar 1: pendaftaran gagal"); }} @Override public void contextDestroyed (servletContextEvent servletContextEvent) {if (is_registry) {zkclient.stop (); }}}Anda perlu menulis pendengar terlebih dahulu. Pendengar ini mengimplementasikan antarmuka ServletContextListener dan membubarkannya dengan @WebListener. Ini adalah metode mendengarkan anotasi springboot.
Setelah wadah servlet berhasil dimulai, metode contextinitialized dari pendengar akan dipanggil. Jika wadah servlet dihancurkan dan tidak dapat memberikan layanan, metode ContextDesroyed dari pendengar akan dipanggil. Dengan kata lain, pendengar ini mendengarkan keadaan wadah servlet.
Maka Anda hanya perlu membuka konfigurasi pendengar di kelas utama aplikasi.
@ServletComponentScan@springbootApplicationPublic kelas WebApplication {}3. Perbandingan kedua metode ini
Untuk layanan web yang menyediakan protokol HTTP secara eksternal, pendaftaran wadah servlet akan lebih jelas dalam semantik. Namun, jika wadah pegas Anda dimulai terlalu lama, inisialisasi servlet dapat diselesaikan dan terdaftar, tetapi layanan tidak dapat menyediakan akses ke waktu kesenjangan secara eksternal, jadi saya biasanya menggunakan metode pertama untuk mendaftar.
Skenario ini seperti ini
Dapat dilihat bahwa setelah pendaftaran Servlet berhasil, aplikasi web belum dimulai, dan layanan tidak dapat menyediakan akses secara normal saat ini.
Anda dapat melihat di ZK bahwa kedua pendaftaran telah berhasil.
Meringkaskan
Di atas adalah penjelasan terperinci tentang Pusat Pendaftaran Layanan Registrasi Springboot (ZK) yang diperkenalkan kepada Anda oleh editor. Saya harap ini akan membantu Anda. Jika Anda memiliki pertanyaan, silakan tinggalkan saya pesan dan editor akan membalas Anda tepat waktu. Terima kasih banyak atas dukungan Anda ke situs web Wulin.com!