Komunikasi antara perkhidmatan mikro--Protobuf

Lepaskan: 2023-07-24 15:26:10
ke hadapan
719 orang telah melayarinya

1. Gambaran keseluruhan

Komunikasi antara perkhidmatan mikro--Protobuf

Gambar di atas ialah kamera SONY yang dibongkarkan komponen di dalam menjalankan tugas mereka sendiri apabila bekerja, dan hanya melakukan apa yang mereka lakukan. Mereka boleh datang dari pengeluar yang berbeza atau malah negara Dalam dunia global hari ini, kebanyakan produk cemerlang berkembang pada satu titik, mencari perkhidmatan dan teknologi yang lebih baik.

Malah, ia adalah sama untuk teknologi perisian, dan ia lebih seperti mikrokosmos globalisasi.

Microservices Tidak ada definisi yang tetap dan tunggal Dengan peredaran masa dan evolusi teknologi yang berterusan, industri secara senyap-senyap telah membentuk beberapa konsensus termasuk perkara berikut.

  • Perkhidmatan mikro khusus memindahkan maklumat antara satu sama lain melalui protokol komunikasi di seluruh seni bina, seperti HTTP.

  • Perkhidmatan mikro boleh digunakan secara bebas.

  • Perkhidmatan mikro menganjurkan fungsi khusus di sekitar perniagaan.

  • Perkhidmatan mikro tidak terhad kepada bahasa, pangkalan data, perkakasan dan persekitaran perisian untuk melaksanakan perkhidmatan.

  • Perkhidmatan adalah berbutir kecil, pemesejan sokongan, terikat konteks, dan dibina serta dikeluarkan melalui proses automatik.

Daripada ringkasan di atas, interaksi maklumat antara perkhidmatan mikro adalah asas kepada keseluruhan MSA (Seni Bina Perkhidmatan Mikro yang diwujudkan berdasarkan perkhidmatan itu). adalah mudah dan ringkas. Cekap, stabil, berskala dan mudah diselenggara. Penjelmaan muktamad dalam produk ialah pengalaman pengguna, terutamanya untuk perkhidmatan yang memerlukan respons pantas, seperti pembayaran, pembidaan pengiklanan, dsb. Dan Protocol Buffers (biasanya dikenali sebagai Protobuf) adalah yang terbaik daripada mereka.

Mengenai sebabnya, kita boleh rujuk artikel berikut dan tidak akan terperinci di sini. . , permintaan log masuk ini perlu mempunyai Nama Pengguna

Kata Laluan
、Bilangan percubaan semula. Kami boleh mentakrifkan permintaan ini dalam akhiran . proto fail. Kandungan maklumat adalah seperti berikut:

/* LoginRequest represents a login request
* user_name: user name 
* password: password 
* retry_time: retry times, can not over 3 times */

syntax = "proto3";  // proto3 syntax
option go_package = "pb/request";

message LoginRequest {
 string user_name = 1;
 string password = 2;
 int32 retry_times = 3;
}
Salin selepas log masuk

Versi protokol

Baris pertama mentakrifkan versi sintaks yang sedang digunakan, dan versi terkini ialah

proto3. Anda juga boleh menggunakan 用户名密码重试次数。我们可以将这个请求定义在一个后缀为.protoproto2

Jenis medan protokol

LoginRequest Isi mesej mentakrifkan tiga parameter khusus, setiap parameter mempunyai jenis dan nama tertentu. Setiap medan boleh ditakrifkan sebagai .proto Type dalam jadual berikut – dan jenis yang akhirnya digunakan dalam bahasa tertentu (Java + Go) juga boleh didapati dalam jadual.

.
Menggunakan pengekodan panjang berubah-ubah. Nilai int yang ditandatangani. Ini lebih cekap mengekod nombor negatif daripada int32 biasa.intint32sint64int32sint64bait

注释

Protobuf 支持 C/C++ 中的两种注释风格

  1. 斜线加星号 /* ... */

  2. 双斜线 //

2.2 代码生成

Golang 代码生成

  1. 到 Protobuf 官方 Repo 下载对应平台的 protoc 工具

  2. 首先用 go命令安装生成Go代码的工具, 此工具为生成Golang代码的插件

    go install google.golang.org/protobuf/cmd/protoc-gen-go
    Salin selepas log masuk
  3. 生成最终的代码

    SRC_DIR: 源目录

    DST_DIR: 生成的代码目录

    protoc -I=$SRC_DIR --go_out=$DST_DIR $SRC_DIR/request.proto
    Salin selepas log masuk

    最终生成 request.pb.go文件,该文件不用修改,后期有任何更新可以重新生成。

  4. 将上述代码保存到 request.proto 文件中

Golang 代码使用

生成的代码可以直接在项目中使用

func main() {
 // 创建请求
loginRequest := request.LoginRequest{
UserName: "Gavin.Yang",
Password: "92d273941d98a8e1c1bb13ac163f0d4e40c5aa70",
RetryTimes: 0}

 // 序列化
out, err := proto.Marshal(&loginRequest)
if err == nil{
fmt.Println(out)
}
}
Salin selepas log masuk

Atas ialah kandungan terperinci Komunikasi antara perkhidmatan mikro--Protobuf. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:Go语言进阶学习
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
doublefloat64 apung
floatfloat32
int32Menggunakan pengekodan panjang berubah-ubah. Tidak cekap untuk pengekodan nombor negatif – jika medan anda mungkin mempunyai nilai negatif, gunakan sint32 sebaliknya. Tidak cekap untuk mengekod nombor negatif – jika medan anda mungkin mempunyai nilai negatif, gunakan sint64 sebaliknya.longint64
uint32 intuint32
uint64Menggunakan pengekodan panjang ubah.longuint64
menggunakan pembolehubah-panjang Nilai int yang ditandatangani. Ini lebih cekap mengekod nombor negatif daripada int64 biasa.long🎜🎜🎜🎜int64🎜🎜🎜🎜🎜🎜ditetapkan32🎜🎜🎜🎜 empat bytes. Lebih cekap daripada uint32 jika nilai selalunya lebih besar daripada 228.🎜intuint32
fixed64Sentiasa lapan bait. Lebih cekap daripada uint64 jika nilai selalunya lebih besar daripada 256.longuint64
sfixed32 int
int32 sfixed64Sentiasa lapan bait.long
int64
🎜🎜🎜🎜🎜🎜🎜🎜
booleanbool
rentetanSesuatu rentetan mesti sentiasa mengandungi UTF-8 yang dikodkan atau 7-bit ASCII🜎, dan tidak boleh lebih panjang daripada teks 7-bit.🜎 Rentetan rentetan
Boleh mengandungi sebarang jujukan bait sewenang-wenangnya tidak lebih daripada 232.ByteString