Berbagi teknologi

Catatan Praktis Grain Mall-27-Komponen Terdistribusi-SpringCloud-Gateway-Creation

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Isi utama bagian ini adalah membuat modul gateway, mendaftarkan gateway ke Nacos, dan mengkonfigurasi perutean untuk pengujian.

1. Buat modul gerbang

Klik kanan pada proyek tersebutNew->Module, buat modul baru, nama modul gulimall-gateway

Masukkan deskripsi gambar di sini

Isi berbagai informasi.

Masukkan deskripsi gambar di sini

Pilih ketergantungan Gateway.

Masukkan deskripsi gambar di sini
Klik Buat untuk membuat modul.

2. Konfigurasi layanan gerbang

1. Tergantung pada modul umum

		<dependency>
            <groupId>com.atguigu.gulimall</groupId>
            <artifactId>gulimall-common</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

Karena layanan gateway juga perlu menggunakan pusat registrasi dan pusat konfigurasi, maka memerlukan dependensi paket terkait, yang diperoleh dengan mengandalkan modul umum.

2. Mulai penemuan layanan

Dengan menambahkan anotasi ke kelas startup, layanan dapat didaftarkan di pusat registrasi setelah startup.

@EnableDiscoveryClient
  • 1

3. Buat file konfigurasi

Buat tiga file konfigurasi baru di direktori sumber daya.

① aplikasi.properti

Konfigurasikan informasi terkait pusat pendaftaran Nacos.

server.port=80
spring.cloud.nacos.discovery.server-addr=localhost:8848
spring.application.name=gulimall-gateway
  • 1
  • 2
  • 3

② bootstrap.properties

Konfigurasikan informasi yang relevan dari pusat konfigurasi Nacos. Perhatikan bahwa namespace bernama gateway harus dibuat di Nacos terlebih dahulu. Semua file konfigurasi modul gateway disimpan di namespace ini.

Masukkan deskripsi gambar di sini

spring.application.name=gulimall-gateway
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.namespace=405d2201-d62b-4203-80c8-800e9387ad40
  • 1
  • 2
  • 3

③ aplikasi.yml

Dalam file ini, tulis konfigurasi perutean gateway. Lihat bagian selanjutnya untuk detailnya.

3. Konfigurasi perutean gerbang

1. Konfigurasi perutean

Pada bagian ini, kami mengambil dua persyaratan aktual sebagai contoh untuk mempraktikkan cara mengkonfigurasi gateway.

Peran gateway adalah meneruskan permintaan yang diterima ke layanan terkait sesuai dengan aturan yang dikonfigurasi oleh gateway.

Demi kenyamanan demonstrasi, dengan asumsi ada permintaan seperti itu, ketika URL berikut dimasukkan di browser, permintaan tersebut akan diteruskan ke Baidu.

http://localhost/?url=baidu
  • 1

Ketika URL berikut dimasukkan di browser, permintaan akan diteruskan ke Tencent.

http://localhost/?url=qq
  • 1

Bagaimana cara menulis file konfigurasi?

Gerbang Awan Musim Semi GudangDokumentasi resmi, lihat formatnya.

Karena kita perlu melakukan penerusan yang sesuai berdasarkan kondisi kueri pada url, kita menemukan dokumen konfigurasi pernyataan Gateway tentang Query.

Masukkan deskripsi gambar di sini

Lihat dokumen ini untuk konfigurasi.

aplikasi.yml

spring:
  cloud:
    gateway:
      routes:
        - id: baidu_test
          uri: https://www.baidu.com
          predicates:
            - Query=url,baidu
        - id: qq_test
          uri: https://www.qq.com
          predicates:
            - Query=url,qq
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Dua aturan perutean ditentukan di sini untuk menggunakan parameter kueriurlNilai menentukan URI target yang menjadi tujuan penerusan permintaan.

  • spring.cloud.gateway.routes: Ini adalah daftar konfigurasi perutean Spring Cloud Gateway.

  • setiaproutesItem mendefinisikan aturan perutean.

  • id: Setiap aturan perutean memerlukan ID unik untuk mengidentifikasi dan mengelola rute.

  • uri : Jika aturan perutean cocok, permintaan akan diteruskan ke alamat URI ini.Di Sinihttps://www.baidu.comDanhttps://www.qq.comURL situs web Baidu dan Tencent ditentukan masing-masing.

  • predicates : Ini adalah daftar pernyataan aturan perutean yang digunakan untuk menentukan apakah aturan perutean ini harus diterapkan. Pernyataan adalah ekspresi yang dievaluasi berdasarkan metadata permintaan.

    • Query=url,baidu: Pernyataan ini menunjukkan bahwa jika permintaan berisi aurlparameter kueri, dan nilainya sama denganbaidu, maka aturan perutean ini akan dipicu dan permintaan akan diteruskan kehttps://www.baidu.com

    • Query=url,qq: Demikian pula jika parameter kueriurlNilainya adalahqq, permintaan akan diteruskan kehttps://www.qq.com

Dengan cara ini, ketika aplikasi Anda menerima pesan denganurl=baiduatauurl=qqSaat meminta parameter kueri, Spring Cloud Gateway akan memproksi permintaan tersebut ke situs web terkait sesuai dengan aturan di atas.

2. Verifikasi

Kunjungi alamat berikut di browser Anda.

http://localhost/?url=baidu
  • 1

Masukkan deskripsi gambar di sini

Jika Anda memiliki antarmuka di atas, berarti konfigurasi layanan gateway dan konfigurasi routing normal.

catatan eror

Kesalahan akan dilaporkan saat startup Gateway.

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2024-07-11 15:57:32.988 ERROR 27224 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.

Reason: Failed to determine a suitable driver class
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

Masukkan deskripsi gambar di sini

Alasannya adalah modul Gateway bergantung pada modul umum, dan modul umum menyatakan ketergantungannya pada mybatis. Paket mybatis akan mencari konfigurasi terkait database saat startup, dan proyek Gateway tidak memerlukan database, jadi tidak ada konfigurasi yang relevan. .

Solusinya adalah memberi tahu modul gateway bahwa tidak perlu mencari konfigurasi terkait database saat startup, dan Anda dapat mengecualikan dependensi paket yang relevan dengan mendeklarasikan anotasi kelas startup.

Masukkan deskripsi gambar di sini

@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)
  • 1