服务端

未匹配的标注

在这里插入图片描述

上一节,完成了consul的搭建,这节的目标是 写一个服务类,用于客户端调用。

编写服务端

创建 /server/server.go

type OrderServer struct {}

func (h *OrderServer)CreateOrder(ctx context.Context,req *OrderService.Request, rp *OrderService.Response) error  {
    defer func() {
        if err :=recover(); err != nil{
            return
        }
    }()

    goodsId := req.GoodsId;

    rp.Code = 200

    generateOrderId := php2go.Rand(0, 121212); //github.com/syyongx/php2go
    //创建订单的逻辑
    generateOrderId_ := int64(generateOrderId);

    rp.OrderID = generateOrderId_;
    rp.Msg  = fmt.Sprintf("提交订单的goodsid为%s",goodsId)
    return nil
}

编写main

go get github.com/micro/go-micro/v2

获取微服务

server.go 的完整代码:

package main

import (
    "context"
    "fmt"
    "github.com/micro/go-micro/v2"
    "github.com/syyongx/php2go"
    OrderService "order-micro/proto"
)

type OrderServer struct{}

func (h *OrderServer) CreateOrder(ctx context.Context, req *OrderService.Request, rp *OrderService.Response) error {
    defer func() {
        if err := recover(); err != nil {
            return
        }
    }()

    goodsId := req.GoodsId

    rp.Code = 200

    generateOrderId := php2go.Rand(0, 121212) //github.com/syyongx/php2go
    //创建订单的逻辑
    generateOrderId_ := int64(generateOrderId)

    rp.OrderID = generateOrderId_

    rp.Msg = fmt.Sprintf("提交订单的goodsid为%s生成的订单id为%d", goodsId, generateOrderId)

    return nil
}

func main() {

    service := micro.NewService(
        micro.Name("order.service"),
    )

    service.Init()

    OrderService.RegisterOrderServiceHandler(service.Server(), new(OrderServer))

    if err := service.Run(); err != nil {
        fmt.Println("service err", err)
    }
}

解释一下

    service := micro.NewService(
        micro.Name("order.service"),
    )

这边是实现一个微服务,在NewService 可以加一些Options ,比如Name ,这边的Name 是待会注册到Consul 的名字,也是客户端调用的名字
也可以添加自定义的端口号比如:

micro.Address(":8001")

接下来是服务的初始化

    service.Init()

    OrderService.RegisterOrderServiceHandler(service.Server(), new(OrderServer))

并把刚刚的结构体里面的OrderServer 的结构注册到这个服务中去,当然也会把CreateOrder 注册进去,这样客户端就可以调用了方法了

和很多框架比如Gin一样,Run启动服务。

    if err := service.Run(); err != nil {
        fmt.Println("service err", err)
    }

go run server.go

E:\linuxdir\go\src\order-micro\server>go run server.go
2021-08-02 16:28:06  file=v2@v2.9.1/service.go:200 level=info Starting [service] order.service
2021-08-02 16:28:06  file=grpc/grpc.go:864 level=info Server [grpc] Listening on [::]:51567
2021-08-02 16:28:06  file=grpc/grpc.go:697 level=info Registry [mdns] Registering node: order.service-f59428a9-24d9-4ea2-967b-8fdb9351327d

你将看到以上信息,说你启动了一个 order.service 的服务,并且在监听了,监听端口51567是系统随机的,刚刚说了,也可以自定义

git add .
git commit -m "编写服务端并启动"

文档列表

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~