Baru-baru ini, saya melakukan sokongan persekitaran demonstrasi pembidaan projek (POC), yang perlu menyepadukan pelayan Nacos. Memandangkan projek sedia ada sudah mempunyai kebergantungan berkaitan Nacos, bukankah semudah itu? Buat pelayan baharu, konfigurasikannya dan mulakannya semula beberapa kali, bukan? Walau bagaimanapun, perkara-perkara tidak semudah yang difikirkan. Kod yang sama boleh berjaya didaftarkan apabila dijalankan dalam IDE tempatan saya, tetapi tidak boleh digunakan dalam persekitaran demo Tomcat+War.
Selepas menyahpepijat kod dari jauh, didapati bahawa rangkaian pelanggan Nacos telah dimulakan, tetapi pendaftaran tidak berjaya.
Saya fikir ia mungkin berkaitan dengan mod penggunaan Tomcat, jadi saya menyemak isu rasmi dan StackOverFlow
Acara ini diterbitkan sebagai sebahagian daripada Spring Boot bermula instance Tomcat terbenam . Jika anda menggunakan bekas luaran, tiada bekas terbenam untuk dimulakan dan, oleh itu, tiada acara diterbitkan – berjaya, Acara
akan dikeluarkan. Pelanggan Nacos akan menunggu acara ini berlaku sebelum mendaftarkan dirinya dengan pelayan. Dan kerana ia digunakan dalam Tomcat luaran, Tomcat terbenam tidak akan dimulakan, jadi acara ini tidak akan dicetuskan.WebServerInitializedEvent
Jadi penyelesaiannya ialah memanggil beberapa kod acara seperti Nacos dan biarkan mereka memulakan pendaftaran.
Kelas pendaftaran automatik Nacos ialah
, yang mewarisi kaedah Spring Cloud seperti NacosAutoServiceRegistration
mendengar acara, tetapkan nombor port dan mulakan pendaftaran. Di sini AbstractAutoServiceRegistration
diperolehi daripada acara tersebut dan perlu diperolehi sendiri. AbstractAutoServiceRegistration
bind(WebServerInitializedEvent)
this.port
Kedudukan di mana port ditetapkan kelihatan, ia diambil dari , hanya tetapkannya.
org.springframework.cloud.client.serviceregistry.Registration
Penyelesaian
Saya menulis kelas konfigurasi lengkap dan meletakkannya di bawah ISU, yang disiarkan terus di bawah.Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah apabila SpringBoot digunakan ke Tomcat luaran dan tidak boleh didaftarkan ke pelayan Nacos. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!