Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pendaftaran perkhidmatan dan penemuan dalam bahasa Go

Pendaftaran perkhidmatan dan penemuan dalam bahasa Go

PHPz
PHPzasal
2023-06-01 09:12:181811semak imbas

Dengan pembangunan seni bina perkhidmatan mikro, pendaftaran dan penemuan perkhidmatan menjadi semakin penting. Untuk bahasa Go, disebabkan kecekapan tinggi dan prestasi konkurensi yang sangat baik, ia menjadi semakin popular sebagai bahasa pembangunan untuk perkhidmatan mikro. Artikel ini akan memperkenalkan cara mendaftar dan menemui perkhidmatan dalam bahasa Go.

  1. Apakah itu pendaftaran dan penemuan perkhidmatan?

Pendaftaran dan penemuan perkhidmatan bermakna penyedia perkhidmatan mendaftarkan perkhidmatannya ke pusat pendaftaran perkhidmatan, dan pengguna perkhidmatan mendapatkan senarai perkhidmatan yang tersedia daripada pusat pendaftaran dan menghubungi perkhidmatan yang sepadan. Pendaftaran perkhidmatan boleh menjadi proses bebas atau kelompok bebas yang digunakan untuk menyimpan maklumat pembekal perkhidmatan.

Tujuan utama pendaftaran dan penemuan perkhidmatan adalah untuk memudahkan penggunaan perkhidmatan dan tadbir urus dalam seni bina perkhidmatan mikro.

  1. Pendaftaran dan penemuan perkhidmatan berdasarkan Konsul

Consul ialah alat penemuan dan konfigurasi perkhidmatan sumber terbuka yang dibangunkan oleh HashiCorp dan menyokong berbilang platform dan bahasa, termasuk bahasa Go . Di bawah ini kami akan menggunakan Konsul sebagai pusat pendaftaran perkhidmatan untuk memperkenalkan cara mendaftar dan menemui perkhidmatan dalam bahasa Go.

2.1 Pasang Consul

Mula-mula anda perlu memasang Consul Anda boleh memuat turun versi yang sepadan dari tapak web rasminya dan memasangnya.

2.2 Menulis kod pembekal perkhidmatan

Kami perlu menambah beberapa kandungan pada kod pembekal perkhidmatan untuk pendaftaran perkhidmatan, menggunakan fungsi pendaftaran perkhidmatan dan penemuan yang disediakan oleh perpustakaan go-micro.

package main

import (
    "log"
    "github.com/micro/go-micro"
    "github.com/micro/go-micro/server"
    "github.com/micro/go-plugins/registry/consul"
    "proto/hello"
)

func main() {
    service := micro.NewService(
        micro.Name("hello_service"),
        micro.Registry(consul.NewRegistry()),
    )
    service.Init()

    err := hello.RegisterHelloHandler(service.Server(), new(HelloHandler))
    if err != nil {
        log.Fatal(err)
    }

    if err := service.Run(); err != nil {
        log.Fatal(err)
    }
}

type HelloHandler struct{}

func (s *HelloHandler) SayHello(ctx context.Context, req *hello.Request, rsp *hello.Response) error {
    rsp.Msg = "Hello, " + req.Name
    return nil
}

Dalam kod di atas, kami menggunakan pustaka go-micro untuk mencipta contoh perkhidmatan dan menentukan komponen penemuan perkhidmatan yang digunakannya sebagai Konsul. Selepas perkhidmatan didaftarkan, kami menambah perkhidmatan kami pada pelayan contoh perkhidmatan melalui fungsi RegisterHelloHandler() untuk mengendalikan permintaan daripada pelanggan.

2.3 Menulis kod pengguna perkhidmatan

Kami perlu menambah beberapa kandungan pada kod pengguna perkhidmatan untuk penemuan perkhidmatan, menggunakan fungsi penemuan perkhidmatan yang disediakan oleh perpustakaan go-micro.

package main

import (
    "context"
    "fmt"
    "github.com/micro/go-micro"
    "github.com/micro/go-micro/client"
    "github.com/micro/go-plugins/registry/consul"
    "proto/hello"
)

func main() {
    service := micro.NewService(
        micro.Name("hello_client"),
        micro.Registry(consul.NewRegistry()),
    )
    service.Init()

    client := service.Client()

    helloService := hello.NewHelloService("hello_service", client)

    rsp, err := helloService.SayHello(context.Background(), &hello.Request{Name: "user"})
    if err != nil {
        fmt.Println(err)
        return
    }

    fmt.Println(rsp.Msg)
}

Dalam kod di atas, kami menggunakan pustaka go-micro untuk mencipta contoh perkhidmatan, dan juga menentukan komponen penemuan perkhidmatan yang digunakannya sebagai Konsul. Kami menggunakan nama perkhidmatan "hello_service" untuk mendapatkan alamat perkhidmatan semasa membuat klien perkhidmatan, dan kemudian menghantar permintaan kepada pembekal perkhidmatan dengan menghubungi kaedah SayHello().

  1. Kebaikan dan keburukan pendaftaran dan penemuan perkhidmatan

Kelebihan:

  1. Memudahkan proses permohonan dan tadbir urus perkhidmatan, meningkatkan skalabiliti sistem dan kebolehselenggaraan.
  2. Mengurangkan pengekodan keras kebergantungan alamat perkhidmatan dan kerja menyelenggara senarai perkhidmatan secara manual.
  3. Boleh melakukan pengimbangan beban perkhidmatan dan failover, meningkatkan ketersediaan sistem.

Kelemahan:

  1. Meningkatkan kerumitan sistem dan memerlukan pengenalan komponen pendaftaran dan penemuan perkhidmatan tambahan.
  2. Boleh menyebabkan kelewatan rangkaian tambahan, lebar jalur rangkaian dan isu prestasi perlu dipertimbangkan.
  3. Jika pusat pendaftaran perkhidmatan gagal, ketersediaan keseluruhan sistem akan terjejas.
  4. Ringkasan

Dalam seni bina perkhidmatan mikro, pendaftaran dan penemuan perkhidmatan adalah sangat penting. Artikel ini memperkenalkan kod contoh untuk menggunakan Konsul sebagai pusat pendaftaran perkhidmatan dan menganalisis kelebihan dan kekurangan pendaftaran dan penemuan perkhidmatan. Dalam aplikasi praktikal, kami perlu memilih penyelesaian pendaftaran dan penemuan perkhidmatan yang sesuai berdasarkan keperluan perniagaan dan seni bina sistem tertentu, serta membuat pengoptimuman dan pelarasan yang sesuai.

Atas ialah kandungan terperinci Pendaftaran perkhidmatan dan penemuan dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn