Go Micro 使用 Web

Go Micro 是一个插件化的 RPC 开发框架,用于使用 Go 语言快速构建微服务。

测试 Go Micro Web 服务可以使用 curl,比如测试 http://localhost:8081/user:

$ curl -H "Content-Type: application/json" -X POST http://localhost:8081/user

输出结果:

{
"msg": "user api"
}

使用 Go Micro Web API 客户端调用 go.micro.api.user 服务。以下为客户端程序 main.go:

package main

import (
    "context"
    "github.com/micro/go-micro/client"
    "github.com/micro/go-micro/util/log"
    "github.com/micro/go-plugins/client/http"
)

func main() {
    // 创建 http 客户端
    httpClient := http.NewClient(
        client.ContentType("application/json"),
    )
    
    // 创建 go.micro.api.user 服务的 /user 请求
    req := httpClient.NewRequest("go.micro.api.user", "/user", nil)

    // 返回结果的结构体
    var response struct {
        Msg string
    }

    // 调用 http 请求,返回结果
    err := httpClient.Call(context.Background(), req, &response)
    if err != nil {
        log.Error(err)
        return
    }

    // 打印返回结果
    log.Info(response.Msg)
}

注意不要忘记 client.ContentType("application/json")。

输出结果:

user api

客户端增加轮询 RoundRobin 均衡算法调用 go.micro.api.user 服务。以下为客户端程序 main.go:

package main

import (
    "context"
    "github.com/micro/go-micro/client"
    "github.com/micro/go-micro/client/selector"
    "github.com/micro/go-micro/util/log"
    "github.com/micro/go-plugins/client/http"
)

func main() {
    // 创建轮询 RoundRobin 均衡算法
    rrSelector := selector.NewSelector(
        selector.SetStrategy(selector.RoundRobin),
    )

    // 创建 http 客户端
    httpClient := http.NewClient(
        client.Selector(rrSelector),
        client.ContentType("application/json"),
    )

    // 创建 go.micro.api.user 服务的 /user 请求
    req := httpClient.NewRequest("go.micro.api.user", "/user", nil)

    // 返回结果的结构体
    var response struct {
        Msg string
    }

    // 调用 http 请求,返回结果
    err := httpClient.Call(context.Background(), req, &response)
    if err != nil {
        log.Error(err)
        return
    }

    // 打印返回结果
    log.Info(response.Msg)
}

输出结果:

user api

在构建微服务时,使用服务注册和发现可以减少配置的复杂性。注册机制提供了一个服务发现机制来将名称解析为地址。它可以由consul,etcd,zookeeper,dns,gossip等提供支持。 ...