You need to enable JavaScript to run this app.
微服务引擎

微服务引擎

复制全文
微服务应用开发
基于 Kitex 使用 Nacos 服务注册中心
复制全文
基于 Kitex 使用 Nacos 服务注册中心

本文主要面向 Kitex 的使用者,通过示例介绍如何使用 MSE Nacos 实现服务注册发现。

说明

MSE Nacos 服务注册发现功能是基于社区 registry-nacos 与 Kitex 服务注册扩展实现。

背景信息

在微服务场景下,部分服务尽可能的拆解到最小的颗粒,确保服务和服务间的深度解耦,方便业务的快速迭代。但是随之而来的服务管理和控制变得异常的复杂和繁琐,维护成本大幅提升。服务注册和服务发现的诞生就可以有效的解决这些问题,提高开发和运维的效率。

  • 服务注册:将服务模块的信息注册到一个公告的组件上,例如注册中心。
  • 服务发现:新注册的服务模块能够及时被其他的服务调用发现。
  • CloudWeGo-Kitex:Golang 微服务 RPC 框架,具有高性能、强可扩展的特点。

前提条件

  • 已创建微服务引擎实例,操作说明参见 创建实例
  • 已创建容器服务集群,操作说明参见 创建集群

    注意

    通过私网连通时,容器服务集群需要和微服务引擎实例处于同一个 VPC。

  • 已开通镜像仓库产品。若未开通,请登录 镜像仓库控制台,根据系统引导开通产品。
  • 已创建镜像仓库实例,操作方法参见 创建标准版实例

操作步骤

步骤一:创建 Provider

  1. 修改 kitex-examples 工程中的 ./hello/main.go 文件。修改后的文件如下所示。

    import (
       "log"
    
       api "github.com/cloudwego/kitex-examples/hello/kitex_gen/api/hello"
       "github.com/cloudwego/kitex/pkg/rpcinfo"
       "github.com/cloudwego/kitex/server"
       "github.com/kitex-contrib/registry-nacos/registry"
       "github.com/nacos-group/nacos-sdk-go/clients"
       "github.com/nacos-group/nacos-sdk-go/common/constant"
       "github.com/nacos-group/nacos-sdk-go/vo"
    )
    
    func main() {
       // ...
       sc := []constant.ServerConfig{
          *constant.NewServerConfig("127.0.0.1", 8848),
       }
    
       cc := constant.ClientConfig{
          Username: "nacos",
          Password: "nacos",
       }
    
       cli, err := clients.NewNamingClient(
          vo.NacosClientParam{
             ClientConfig:  &cc,
             ServerConfigs: sc,
          },
       )
       if err != nil {
          panic(err)
       }
       svr := api.NewServer(
          new(HelloImpl),
          server.WithServerBasicInfo(&rpcinfo.EndpointBasicInfo{ServiceName: "echo"}),
          server.WithRegistry(registry.NewNacosRegistry(cli)),
       )
       if err := svr.Run(); err != nil {
          log.Println("server stopped with error:", err)
       } else {
          log.Println("server stopped")
       }
       // ...
    }
    
  2. 在上述代码的 ServerConfig 中配置 Nacos Server 的地址(上述 MSE Nacos 实例私网或公网访问地址);在ClientConfig 中配置Nacos 用户名、密码。

    • constant.ServerConfig

      参数说明
      constant.NewServerConfigNacos Server 的地址,即 MSE Nacos 实例私网或公网访问地址。
    • constant.ClientConfig

      参数说明
      UsernameNacos 账号用户名。
      PasswordNacos 账号密码。

      说明

      MSE Nacos 默认开启鉴权,用户必须配置鉴权后才能使用。初始用户名和密码为都为 nacos,与控制台访问用户名相同。后续如需更改,支持通过控制台或 OpenAPI 实现。

  3. kitex-examples 工程中修改 Dockerfile 文件。修改后的文件如下所示。

    FROM golang:1.18-alpine
    
    RUN apk update && apk add git
    
    WORKDIR /code
    
    COPY . .
    RUN go env -w GOPROXY=https://goproxy.io,direct
    RUN go env -w GO111MODULE=on
    RUN go build -o hello-server  ./hello
    ENTRYPOINT  ["./hello-server"]
    
  4. 在 Terminal 执行以下操作。

    docker build -t mse-demo-kitex-provider .
    
    
    
  5. 推送 Docker 镜像至镜像仓库,操作说明参见 推送和拉取镜像

  6. 在容器服务创建无状态负载。操作说明参见 创建无状态负载

步骤二:创建 Consumer

  1. 修改 kitex-examples 工程中的 ./hello/client/main.go 文件。修改后的文件如下所示。

    import (
       "context"
       "fmt"
       "log"
       "time"
    
       "github.com/cloudwego/kitex-examples/hello/kitex_gen/api"
       "github.com/cloudwego/kitex-examples/hello/kitex_gen/api/hello"
       "github.com/cloudwego/kitex/client"
       "github.com/kitex-contrib/registry-nacos/resolver"
       "github.com/nacos-group/nacos-sdk-go/clients"
       "github.com/nacos-group/nacos-sdk-go/common/constant"
       "github.com/nacos-group/nacos-sdk-go/vo"
    )
    
    func main() {
       // ...
       sc := []constant.ServerConfig{
          *constant.NewServerConfig("127.0.0.1", 8848),
       }
       cc := constant.ClientConfig{
          Username: "nacos",
          Password: "nacos",
       }
    
       cli, err := clients.NewNamingClient(
          vo.NacosClientParam{
             ClientConfig:  &cc,
             ServerConfigs: sc,
          },
       )
       if err != nil {
          panic(err)
       }
    
       client, err := hello.NewClient("echo", client.WithResolver(resolver.NewNacosResolver(cli)))
       if err != nil {
          log.Fatal(err)
       }
    
       count := 0
       for {
          req := &api.Request{Message: fmt.Sprintf("my request %d", count)}
          resp, err := client.Echo(context.Background(), req)
          if err != nil {
             log.Fatal(err)
          }
          log.Println(resp)
          count++
          time.Sleep(time.Second)
       }
    }
    
  2. 在上述代码的 ServerConfig 中配置 Nacos Server 的地址(上述 MSE Nacos 实例私网或公网访问地址);在ClientConfig 中配置Nacos 用户名、密码。

    • constant.ServerConfig

      参数说明
      constant.NewServerConfigNacos Server 的地址,即 MSE Nacos 实例私网或公网访问地址。
    • constant.ClientConfig

      参数说明
      UsernameNacos 账号用户名。
      PasswordNacos 账号密码。

      说明

      MSE Nacos 默认开启鉴权,用户必须配置鉴权后才能使用。初始用户名和密码为都为 nacos,与控制台访问用户名相同。后续如需更改,支持通过控制台或 OpenAPI 实现。

  3. kitex-examples 工程中修改 Dockerfile 文件。修改后的文件如下所示。

    FROM golang:1.18-alpine
    
    RUN apk update && apk add git
    
    WORKDIR /code
    
    COPY . .
    RUN go env -w GOPROXY=https://goproxy.io,direct
    RUN go env -w GO111MODULE=on
    RUN go build -o hello-client ./hello/client
    ENTRYPOINT  ["./hello-client"]
    
  4. 在 Terminal 执行以下操作。

    docker build -t mse-demo-kitex-consumer .
    
    
    
  5. 推送 Docker 镜像至镜像仓库,操作说明参见 推送和拉取镜像

  6. 在容器服务创建无状态负载。操作说明参见 创建无状态负载

结果验证

  1. 登录 Nacos 实例控制台,操作说明参见 登录 Nacos 控制台

  2. 在左侧菜单栏,单击 服务管理 > 服务列表。即可查看已被发现的 Provider 服务 echo

    alt

  3. 查看 mse-demo-kitex-consumer 无状态负载的日志,可以看到 Consumer 正确的从 Provider 服务 echo 得到了返回。
    alt

最近更新时间:2023.11.10 17:24:38
这个页面对您有帮助吗?
有用
有用
无用
无用