1. Pendahuluan
Dalam sistem arsitektur Microservice, kami biasanya menggunakan broker pesan ringan untuk membangun topik pesan umum untuk menghubungkan semua contoh layanan mikro dalam sistem. Karena pesan yang dihasilkan dalam topik ini akan didengarkan dan dikonsumsi oleh semua contoh, kami menyebutnya bus pesan.
2. Proxy Pesan
PRIFTER MESSAGE adalah model arsitektur verifikasi pesan, transmisi, dan perutean. Ini berfungsi sebagai penjadwalan komunikasi antara aplikasi dan meminimalkan dependensi antara aplikasi, sehingga aplikasi dapat secara efisien memisahkan proses komunikasi. Pialang pesan adalah produk middleware. Inti adalah program perutean pesan yang digunakan untuk menerima dan mendistribusikan pesan, dan meneruskannya ke aplikasi yang benar berdasarkan aliran pemrosesan pesan yang ditetapkan. Ini termasuk komunikasi independen dan protokol pesan, memungkinkan komunikasi jaringan di dalam dan di antara organisasi. Tujuan merancang proxy adalah untuk dapat menyampaikan pesan dari aplikasi dan melakukan beberapa operasi khusus. Berikut ini adalah skenario dalam aplikasi perusahaan di mana kita sering perlu menggunakan proxy pesan:
Sudah ada banyak produk open source untuk digunakan semua orang, seperti:
3. Springcloud+Rabbitmq
(1) Pendahuluan dan instalasi RabbitMQ tidak akan dirinci.
(2) pom.xml
<Dependencies> <dependency> <GroupId> org.springframework.boot </groupid> <ArtifactId> Spring-boot-starter-AMQP </artifactid> </dependency> <ArtiFAcD> <Arpor-boots-stopramework.boot </groupid> <ArtiFacTid> SCOPOP> SCRING-BOTTER.TEST.BOT </groupid> <ArtiFacTid> Spring-boots </dependency> </dependensi>
(3) Application.yml
Spring: Aplikasi: Nama: Rabbitmq-Hello Rabbitmq: Host: ***. ***. ***. ***. *** Port: 5672 Nama Pengguna: Kata Sandi Tamu: Tamu
(4) Pengirim
@Component Public Class Sender {Private Static Final Logger Log = LoggerFactory.GetLogger (sender.class); @Autowired private amqptemplate amqptemplate; public void send () {string context = "hello" + new date (); log.info ("pengirim:" + konteks); this.amqptemplate.convertandsend ("halo", konteks); }}(5) Penerima
@Component @rabbitListener (queues = "hello") penerima kelas publik {private static final logger log = loggerFactory.getLogger (receiver.class); @Rabbithandler Proses public void (String Hello) {log.info ("penerima:" + halo); }}(6) Buat kelas konfigurasi rabbitmq rabbitconfig
@Configuration Public Class RabbitConfig {@Bean Public Queue Helloqueue () {return baru antrian ("hello"); }} (7) Buat kelas uji unit untuk memanggil produksi pesan
@Runwith (springjunit4classrunner.class) @springboottest (class = springcloudbusrabbitmqapplication.class) kelas publik helloApplicationTests {@autowired private pengirim pengirim; @Test public void hello () melempar Exception {sender.send (); }} (8) Tes, jalankan HelloApplicationTests
(9) Kunjungi Host: 15672
4. Transform Config-Client (Integrate SpringCloud Bus)
(1) pom.xml
<Dependencies> <dependency> <GroupId> org.springframework.cloud </proupid> <t ArtifactId> Spring-cloud-starter-config </t Artifactid> </dependency> <sependency> <trotifD> org.springframework.boot </groupid> <ArtifactId> <artfactid> SPRINGINGING-BOTORT. <GroupId> org.springframework.cloud </groupid> <ArTifactId> Spring-cloud-starter-eureka </arttifactid> </gandendency> <sependency> <groupid> org.springframework.cloud </groupid> <Artifactid> SPRING-CLOUD-STARTER-BUS-AAMQP </ARTIFACTION <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
(2) bootstrap.properties
spring.application.name=configspace spring.cloud.config.label=master spring.cloud.config.profile=dev spring.cloud.config.uri= http://localhost:5588/ eureka.client.serviceUrl.defaultZone=http://localhost:5555/eureka/ server.port=5589 spring.rabbitmq.host = 118.89.237.88 spring.rabbitmq.port = 5672 spring.rabbitmq.username = Guest spring.rabbitmq.password = manajemen tamu.security.enabled = false
(3) Tidak perlu mengubah yang lain
V. tes
(1) Persiapan tes
Pusat Pendaftaran Layanan, Eurekaserver, Port 5555;
Pusat konfigurasi terdistribusi, ConfigServer, dengan port 5588;
Dua konfigurasi terdistribusi, ConfigClient, port adalah 5589 dan 5590; (2) Kunjungi http: // localhost: 5589/from
(3) Kunjungi http: // localhost: 5590/from
Rabbitmq:
(4) Pergi ke gudang untuk memodifikasi nilai kata sandi
dari = git-dev-v1.0 oleh springcloud config-server username = kata sandi springcloud = 1234567890
(5) Posting Permintaan http: // localhost: 5589/bus/refresh atau http: // localhost: 5590/bus/refresh
Setelah permintaan yang berhasil, config-client akan membaca ulang file konfigurasi.
(6) Kunjungi lagi
Jika Posting Permintaan: http: // localhost: 5590/bus/refresh, silakan kunjungi http: // localhost: 5589/from
Selain itu, antarmuka/bus/penyegaran dapat menentukan layanan, yaitu, menggunakan parameter "nama pengguna", seperti "/bus/refresh? Tujuan = Nama pengguna: **" Untuk menyegarkan semua layanan yang nama layanannya adalah nama pengguna, terlepas dari alamat IP.
(7) Arsitektur
(8) Penyesuaian arsitektur
Karena antarmuka /bus /penyegaran bus Springcloud memberikan parameter untuk pembaruan konfigurasi untuk layanan dan instance, arsitektur kami juga dapat membuat beberapa penyesuaian yang sesuai. Dalam arsitektur sebelumnya, pembaruan konfigurasi dari layanan yang diperlukan untuk mengirim permintaan ke instance di layanan tertentu, dan kemudian memicu pembaruan konfigurasi dari seluruh cluster layanan. Meskipun fungsi dapat diimplementasikan, hasilnya adalah bahwa instance aplikasi yang kami tentukan akan berbeda dari instance aplikasi lain di cluster, yang akan meningkatkan kompleksitas dalam cluster dan merugikan operasi operasi dan pemeliharaan di masa depan. Misalnya, jika instance layanan perlu dimigrasi, kita harus memodifikasi konfigurasi dalam kait web, dll. Oleh karena itu, kita harus membuat setiap node dalam cluster layanan mengintip sebanyak mungkin.
Oleh karena itu, kami telah membuat beberapa penyesuaian pada arsitektur sebelumnya, seperti yang ditunjukkan pada gambar di bawah ini:
Perubahan berikut telah dibuat:
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.