Rumah pembangunan bahagian belakang Golang Gunakan go-zero untuk melaksanakan panggilan RPC merentas bahasa yang diedarkan

Gunakan go-zero untuk melaksanakan panggilan RPC merentas bahasa yang diedarkan

Jun 22, 2023 am 09:25 AM
diedarkan go-zero panggilan rpc

Dengan pertumbuhan skala perniagaan, kewujudan aplikasi tunggal tidak lagi dapat memenuhi keperluan sistem, dan seni bina yang diedarkan secara beransur-ansur menjadi arus perdana. Dalam sistem teragih, RPC telah menjadi bahagian yang amat diperlukan Ia menyediakan cara yang mudah, cekap dan boleh dipercayai untuk memanggil perkhidmatan dari jauh, membolehkan interaksi data dan panggilan yang cepat dan stabil antara pelbagai perkhidmatan.

Untuk panggilan RPC merentas bahasa, kedua-dua protokol komunikasi dan protokol bersiri perlu serasi dengan berbilang bahasa pengaturcaraan, jadi ia agak sukar untuk dilaksanakan. Artikel ini akan memperkenalkan cara menggunakan rangka kerja go-zero untuk melaksanakan panggilan RPC teragih merentas bahasa, bertujuan untuk menyediakan penyelesaian praktikal kepada pembaca.

  1. Pengenalan kepada rangka kerja go-zero

go-zero ialah rangka kerja Web ringan yang menggunakan modul net/http asli bahasa go dan menyediakan set A kaedah pembangunan API yang ringkas, mudah digunakan dan berprestasi tinggi yang boleh menggabungkan perkhidmatan HTTP dengan perkhidmatan mikro dengan mudah. go-zero boleh membantu kami membina aplikasi pelayan berkonkurensi tinggi dengan cepat dan kod serta dokumentasi boleh diperoleh secara percuma di GitHub.

  1. Melaksanakan panggilan RPC merentas bahasa

2.1 Menentukan perkhidmatan

Apabila kami mentakrifkan perkhidmatan dalam go-zero, kami perlu menulis fail proto terlebih dahulu dan tentukan antara muka Komunikasi antara pelayan dan klien. Katakan kita mentakrifkan perkhidmatan bernama Contoh, yang mengandungi dua kaedah:

syntax = "proto3";

package rpc;

service Example {
    rpc SayHello (Request) returns (Response);
    rpc GetUser (UserRequest) returns (UserResponse);
}

message Request {
    string name = 1;
}

message Response {
    string message = 1;
}

message UserRequest {
    string id = 1;
}

message UserResponse {
    string name = 1;
    string email = 2;
}
Salin selepas log masuk

Selepas mentakrifkan fail proto, kita perlu menggunakan pengkompil protobuf untuk menyusunnya ke dalam fail sumber bahasa go dan laksanakan arahan berikut:

protoc --go_out=. --go-grpc_out=. rpc.proto
Salin selepas log masuk

Ini akan menghasilkan dua fail, rpc.pb.go dan rpc_grpc.pb.go.

2.2 Melaksanakan pelayan

Dalam rangka kerja go-zero, kita boleh menggunakan modul go-grpc untuk melaksanakan perkhidmatan grpc. Apabila melaksanakan pelayan, anda perlu melaksanakan antara muka yang ditakrifkan dalam fail proto, gunakan pelayan.NewServer yang disediakan oleh go-zero dan panggil kaedah AddService untuk menambah perkhidmatan, dan kemudian mulakan perkhidmatan grpc dalam kaedah Init.

package server

import (
    "context"
    "rpc"

    "github.com/tal-tech/go-zero/core/logx"
    "github.com/tal-tech/go-zero/core/stores/sqlx"
    "github.com/tal-tech/go-zero/core/syncx"
    "github.com/tal-tech/go-zero/zrpc"
    "google.golang.org/grpc"
)

type ExampleContext struct {
    Logx      logx.Logger
    SqlConn   sqlx.SqlConn
    CacheConn syncx.SharedCalls
}

type ExampleServer struct {
    Example rpc.ExampleServer
}

func NewExampleServer(ctx ExampleContext) *ExampleServer {
    return &ExampleServer{
        Example: &exampleService{
            ctx: ctx,
        },
    }
}

func (s *ExampleServer) Init() {
    server := zrpc.MustNewServer(zrpc.RpcServerConf{
        BindAddress: "localhost:7777",
    })
    rpc.RegisterExampleServer(server, s.Example)
    server.Start()
}

type exampleService struct {
    ctx ExampleContext
}

func (s *exampleService) SayHello(ctx context.Context, req *rpc.Request) (*rpc.Response, error) {
    return &rpc.Response{
        Message: "Hello, " + req.Name,
    }, nil
}

func (s *exampleService) GetUser(ctx context.Context, req *rpc.UserRequest) (*rpc.UserResponse, error) {
    // 查询数据库
    return &rpc.UserResponse{
        Name:  "name",
        Email: "email",
    }, nil
}
Salin selepas log masuk

Pada pelayan, kita boleh menggunakan kaedah Init untuk memulakan pelayan RPC dan menggunakan MustNewServer untuk mencipta pelayan RPC Kita mesti lulus dalam struktur RpcServerConf yang mengandungi alamat yang ingin kita ikat.

2.3 Melaksanakan klien

Dalam rangka kerja go-zero, kita boleh menggunakan modul zrpc untuk melaksanakan klien grpc. Gunakan zrpc.Dial untuk membuat sambungan dan membuat instantiate klien rpc.

package client

import (
    "context"
    "rpc"

    "google.golang.org/grpc"
)

type ExampleClient struct {
    client rpc.ExampleClient
}

func NewExampleClient(conn *grpc.ClientConn) *ExampleClient {
    return &ExampleClient{
        client: rpc.NewExampleClient(conn),
    }
}

func (c *ExampleClient) SayHello(name string) (string, error) {
    resp, err := c.client.SayHello(context.Background(), &rpc.Request{
        Name: name,
    })
    if err != nil {
        return "", err
    }
    return resp.Message, nil
}

func (c *ExampleClient) GetUser(id string) (*rpc.UserResponse, error) {
    return c.client.GetUser(context.Background(), &rpc.UserRequest{
        Id: id,
    })
}
Salin selepas log masuk

Pada klien, kami hanya perlu menggunakan fungsi NewExampleClient untuk mencipta klien RPC. Fungsi kaedah SayHello adalah untuk mendapatkan respons daripada pelayan dan mengembalikannya. Kaedah GetUser mendapatkan respons maklumat pengguna daripada pelayan dan mengembalikannya dalam bentuk UserResponse.

2.4 Pengujian

Sekarang kami telah melaksanakan kod pelayan dan klien, kami boleh mengujinya dengan kod berikut:

package main

import (
    "fmt"
    "log"
    "rpc_example/client"
    "rpc_example/server"

    "google.golang.org/grpc"
)

func main() {
    ctx := server.ExampleContext{}
    conn, err := grpc.Dial("localhost:7777", grpc.WithInsecure())
    if err != nil {
        log.Fatalf("grpc.Dial err :%v", err)
    }

    defer conn.Close()

    client := client.NewExampleClient(conn)
    resp, err := client.SayHello("Alice")
    if err != nil {
        log.Fatalf("client.SayHello err : %v", err)
    }

    fmt.Println(resp)

    user, err := client.GetUser("123")
    if err != nil {
        log.Fatalf("client.GetUser err : %v", err)
    }

    fmt.Println(user)
}
Salin selepas log masuk

Dalam kod di atas, kami mencipta Open a grpc dan hubungi kaedah SayHello dan GetUser untuk menguji perkhidmatan RPC kami. Kami berjaya membalas dengan data yang betul dan mengesahkan bahawa perkhidmatan RPC berfungsi seperti biasa.

  1. Ringkasan

Dalam artikel ini, kami memperkenalkan cara menggunakan rangka kerja go-zero untuk melaksanakan panggilan RPC merentas bahasa teragih, yang melibatkan modul Def go-zero , grpc, protobuf dan zrpc serta teknologi lain. Apabila melaksanakan perkhidmatan RPC, kami mula-mula menentukan antara muka RPC, dan kemudian menulis kod pelayan dan klien berdasarkan antara muka. Akhir sekali tambah kaedah Init untuk memulakan perkhidmatan RPC. Jika anda sedang mencari rangka kerja sistem teragih yang ringan dan mudah digunakan, go-zero sememangnya pilihan yang baik.

Atas ialah kandungan terperinci Gunakan go-zero untuk melaksanakan panggilan RPC merentas bahasa yang diedarkan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Cara menggunakan Redis untuk mencapai penyegerakan data teragih Cara menggunakan Redis untuk mencapai penyegerakan data teragih Nov 07, 2023 pm 03:55 PM

Cara menggunakan Redis untuk mencapai penyegerakan data teragih Dengan perkembangan teknologi Internet dan senario aplikasi yang semakin kompleks, konsep sistem teragih semakin diterima pakai secara meluas. Dalam sistem teragih, penyegerakan data merupakan isu penting. Sebagai pangkalan data dalam memori berprestasi tinggi, Redis bukan sahaja boleh digunakan untuk menyimpan data, tetapi juga boleh digunakan untuk mencapai penyegerakan data teragih. Untuk penyegerakan data teragih, biasanya terdapat dua mod biasa: mod terbitkan/langgan (Terbitkan/Langgan) dan replikasi induk-hamba (Master-slave).

Berkongsi pengalaman menggunakan MongoDB untuk melaksanakan penjadualan dan pelaksanaan tugas teragih Berkongsi pengalaman menggunakan MongoDB untuk melaksanakan penjadualan dan pelaksanaan tugas teragih Nov 02, 2023 am 09:39 AM

MongoDB ialah pangkalan data NoSQL sumber terbuka dengan prestasi tinggi, berskala dan fleksibiliti. Dalam sistem teragih, penjadualan tugas dan pelaksanaan adalah isu utama Dengan menggunakan ciri-ciri MongoDB, penjadualan tugasan dan penyelesaian pelaksanaan boleh direalisasikan. 1. Analisis Keperluan untuk Penjadualan Tugasan Teragih Dalam sistem teragih, penjadualan tugas ialah proses memperuntukkan tugas kepada nod yang berbeza untuk dilaksanakan. Keperluan penjadualan tugas biasa termasuk: 1. Pengagihan permintaan tugas: Hantar permintaan tugas ke nod pelaksanaan yang tersedia.

Cara Redis melaksanakan pengurusan sesi teragih Cara Redis melaksanakan pengurusan sesi teragih Nov 07, 2023 am 11:10 AM

Cara Redis melaksanakan pengurusan sesi teragih memerlukan contoh kod khusus Pengurusan sesi teragih adalah salah satu topik hangat di Internet hari ini Dalam menghadapi kesesuaian yang tinggi dan volum data yang besar, kaedah pengurusan sesi tradisional secara beransur-ansur menjadi tidak mencukupi. Sebagai pangkalan data nilai kunci berprestasi tinggi, Redis menyediakan penyelesaian pengurusan sesi teragih. Artikel ini akan memperkenalkan cara menggunakan Redis untuk melaksanakan pengurusan sesi teragih dan memberikan contoh kod khusus. 1. Pengenalan kepada Redis sebagai storan sesi teragih Kaedah pengurusan sesi tradisional adalah untuk menyimpan maklumat sesi

Cara menggunakan Swoole untuk melaksanakan penjadualan tugas berjadual teragih Cara menggunakan Swoole untuk melaksanakan penjadualan tugas berjadual teragih Nov 07, 2023 am 11:04 AM

Cara menggunakan Swoole untuk melaksanakan penjadualan tugas berjadual teragih Pengenalan: Dalam pembangunan PHP tradisional, kami sering menggunakan cron untuk melaksanakan penjadualan tugas berjadual, tetapi cron hanya boleh melaksanakan tugas pada pelayan tunggal dan tidak dapat menangani senario konkurensi yang tinggi. Swoole ialah rangka kerja serentak tak segerak berprestasi tinggi berdasarkan PHP Ia menyediakan keupayaan komunikasi rangkaian yang lengkap dan sokongan berbilang proses, membolehkan kami melaksanakan penjadualan tugas berjadual dengan mudah. Artikel ini akan memperkenalkan cara menggunakan Swoole untuk melaksanakan penjadualan tugas berjadual teragih

Menggunakan Redis untuk mencapai ketekalan cache yang diedarkan Menggunakan Redis untuk mencapai ketekalan cache yang diedarkan Nov 07, 2023 pm 12:05 PM

Menggunakan Redis untuk mencapai ketekalan cache teragih Dalam sistem teragih moden, cache memainkan peranan yang sangat penting. Ia boleh mengurangkan kekerapan capaian sistem kepada pangkalan data dan meningkatkan prestasi dan daya pemprosesan sistem. Dalam sistem yang diedarkan, untuk memastikan ketekalan cache, kita perlu menyelesaikan masalah penyegerakan data antara berbilang nod. Dalam artikel ini, kami akan memperkenalkan cara menggunakan Redis untuk mencapai ketekalan cache yang diedarkan dan memberikan contoh kod khusus. Redis ialah pangkalan data nilai kunci berprestasi tinggi yang menyokong kegigihan, replikasi dan pengumpulan

Menggunakan Redis untuk melaksanakan penjadualan tugas teragih Menggunakan Redis untuk melaksanakan penjadualan tugas teragih Nov 07, 2023 am 08:15 AM

Menggunakan Redis untuk melaksanakan penjadualan tugas teragih Dengan pengembangan perniagaan dan pembangunan sistem, banyak perniagaan perlu melaksanakan penjadualan tugas teragih untuk memastikan tugas boleh dilaksanakan pada berbilang nod pada masa yang sama, dengan itu meningkatkan kestabilan dan ketersediaan sistem. Sebagai produk penyimpanan data memori berprestasi tinggi, Redis mempunyai ciri pengedaran, ketersediaan tinggi dan prestasi tinggi, dan sangat sesuai untuk melaksanakan penjadualan tugas teragih. Artikel ini akan memperkenalkan cara menggunakan Redis untuk melaksanakan penjadualan tugas teragih dan menyediakan contoh kod yang sepadan. 1. Pangkalan Redis

Perkongsian pengalaman praktikal pembangunan Java: membina fungsi pengumpulan log teragih Perkongsian pengalaman praktikal pembangunan Java: membina fungsi pengumpulan log teragih Nov 20, 2023 pm 01:17 PM

Berkongsi pengalaman praktikal dalam pembangunan Java: Membina fungsi pengumpulan log teragih Pengenalan: Dengan perkembangan pesat Internet dan kemunculan data berskala besar, aplikasi sistem teragih menjadi semakin meluas. Dalam sistem teragih, pengumpulan dan analisis log adalah bahagian yang sangat penting. Artikel ini akan berkongsi pengalaman membina fungsi pengumpulan log teragih dalam pembangunan Java, dengan harapan dapat membantu pembaca. 1. Pengenalan latar belakang Dalam sistem teragih, setiap nod menjana sejumlah besar maklumat log. Maklumat log ini berguna untuk pemantauan prestasi sistem, penyelesaian masalah dan analisis data.

Cara menggunakan Redis untuk melaksanakan penerbitan dan langganan mesej yang diedarkan Cara menggunakan Redis untuk melaksanakan penerbitan dan langganan mesej yang diedarkan Nov 07, 2023 am 09:39 AM

Cara menggunakan Redis untuk melaksanakan penerbitan dan langganan mesej yang diedarkan Pengenalan: Dalam sistem yang diedarkan, penerbitan dan langganan mesej ialah mod komunikasi biasa yang boleh mencapai penyahgandingan antara modul yang berbeza. Sebagai sistem storan nilai kunci berprestasi tinggi, Redis boleh digunakan untuk melaksanakan fungsi penerbitan dan langganan mesej yang diedarkan. Artikel ini akan memperkenalkan cara menggunakan Redis untuk melaksanakan fungsi ini dan menyediakan contoh kod khusus. 1. Fungsi terbitkan dan langgan Redis Fungsi terbitkan dan langgan Redis ialah kaedah pelaksanaan berdasarkan baris gilir mesej.

See all articles