Mengintegrasikan fungsi Go dalam seni bina perkhidmatan mikro boleh dicapai dengan mengikut langkah berikut: Cipta fungsi Go bebas. Pakej berfungsi ke dalam binari. Panggil fungsi yang disusun melalui Exec یا GRPC dalam perkhidmatan mikro. Dalam kes sebenar, perkhidmatan mikro menggunakan fungsi ProcessData untuk mendarab setiap nombor dalam senarai integer dengan 2, yang dilaksanakan dengan memanggil fail binari myfunction.
Mengintegrasikan fungsi Go dalam seni bina perkhidmatan mikro
Dalam seni bina perkhidmatan mikro, adalah penting untuk menyepadukan fungsi bebas ke dalam perkhidmatan dengan lancar. Bahasa Go menyediakan mekanisme yang berkuasa untuk menyepadukan fungsi Artikel ini akan meneroka cara melakukan ini dengan contoh praktikal.
1 Buat fungsi Golang
Gunakan func
untuk mencipta fungsi Go kendiri yang menerima input dan menjana output. Contohnya: func
创建一个独立的 Go 函数,它接收输入并生成输出。例如:
package mypkg func ProcessData(data []int) []int { // 处理数据的函数 result := []int{} for _, v := range data { result = append(result, v*2) } return result }
2. 将函数打包为二进制文件
将函数编译为独立的二进制文件,方法是使用 go build
命令:
go build -o myfunction mypkg/myfunction.go
3. 在微服务中调用函数
微服务可以通过以下方式调用已编译的函数:
a. Exec:
这涉及直接在微服务代码中执行函数二进制文件。例如,在 Go 中:
import ( "bytes" "fmt" "os/exec" ) func main() { cmd := exec.Command("./myfunction", "1", "2", "3") var out bytes.Buffer cmd.Stdout = &out cmd.Run() fmt.Print(out.String()) }
b. 使用 GRPC:
这是通过 gRPC 创建远程函数调用的更强大且高效的方法。使用 net/rpc
包来设置 RPC 服务器和客户端,如下所示:
// 服务端 package main import ( "fmt" "net/rpc" ) type Args struct { A, B int } func main() { rpc.Register(new(Calc)) rpc.HandleHTTP() fmt.Print("Server listening...") err := http.ListenAndServe(":8080", nil) if err != nil { fmt.Println(err) } } // 客户端 package main import ( "net/rpc" "net/http" "log" "fmt" ) type Args struct { A, B int } func main() { client, err := rpc.DialHTTP("tcp", "localhost:8080") if err != nil { log.Fatal(err) } args := &Args{7, 8} var sum int err = client.Call("Calc.Add", args, &sum) if err != nil { log.Fatal(err) } fmt.Printf("Sum: %d", sum) }
实战案例:
假设有一个微服务,用于处理来自客户端的整数列表,并将其中的每个数字乘以 2。我们可以使用上面的 ProcessData
函数来实现此功能:
在微服务代码中:
package main import ( "fmt" "os/exec" "bytes" "strconv" ) func main() { numbers := []int{1, 2, 3} var inputStr string for _, v := range numbers { inputStr += strconv.Itoa(v) + " " } cmd := exec.Command("./myfunction", inputStr) var out bytes.Buffer cmd.Stdout = &out cmd.Run() result := out.String() fmt.Print(result) }
微服务现在将调用已编译的 myfunction
rrreee
go build
: 🎜rrreee🎜🎜3 Dalam Fungsi Panggilan Mikroservis🎜 memanggil fungsi yang disusun melalui: 🎜🎜🎜a. Exec: 🎜🎜🎜Ini melibatkan pelaksanaan binari fungsi secara langsung dalam kod perkhidmatan mikro. Contohnya, dalam Go: 🎜rrreee🎜🎜b Menggunakan GRPC: 🎜🎜🎜Ini ialah cara yang lebih berkuasa dan cekap untuk membuat panggilan fungsi jauh melalui gRPC. Gunakan pakej net/rpc
untuk menyediakan pelayan RPC dan klien seperti berikut: 🎜rrreee🎜🎜Contoh praktikal: 🎜🎜🎜Andaikan terdapat perkhidmatan mikro yang mengendalikan senarai integer daripada klien, dan Darab setiap nombor di dalamnya dengan 2. Kita boleh melaksanakan ini menggunakan fungsi ProcessData
di atas: 🎜🎜Dalam kod mikroperkhidmatan: 🎜rrreee🎜Perkhidmatan mikro kini akan memanggil binari myfunction
yang disusun, yang akan Melipatgandakan senarai input dengan 2 dan kembalikan hasilnya. 🎜Atas ialah kandungan terperinci Integrasi fungsi Golang dalam seni bina perkhidmatan mikro. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!