1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- package endpoint
- import (
- "context"
- "errors"
- "github.com/go-kit/kit/endpoint"
- "github.com/longjoy/micro-go-course/section28/goods/service"
- "golang.org/x/time/rate"
- "log"
- )
- type GoodsEndpoints struct {
- GoodsDetailEndpoint endpoint.Endpoint
- HealthCheckEndpoint endpoint.Endpoint
- }
- // 服务发现请求结构体
- type GoodsDetailRequest struct {
- Id string
- }
- // 服务发现响应结构体
- type GoodsDetailResponse struct {
- Detail service.GoodsDetailVO `json:"detail"`
- Error string `json:"error"`
- }
- // 创建服务发现的 Endpoint
- func MakeGoodsDetailEndpoint(svc service.Service, limiter *rate.Limiter) endpoint.Endpoint {
- return func(ctx context.Context, request interface{}) (response interface{}, err error) {
- if !limiter.Allow() {
- // Allow返回false,表示桶内不足一个令牌,应该被限流,默认返回 ErrLimiExceed 异常
- return nil, errors.New("ErrLimitExceed")
- }
- req := request.(GoodsDetailRequest)
- detail, err := svc.GetGoodsDetail(ctx, req.Id)
- var errString = ""
- if err != nil {
- errString = err.Error()
- return &GoodsDetailResponse{
- Detail: detail,
- Error: errString,
- }, nil
- }
- return &GoodsDetailResponse{
- Detail: detail,
- Error: errString,
- }, nil
- }
- }
- // HealthRequest 健康检查请求结构
- type HealthRequest struct{}
- // HealthResponse 健康检查响应结构
- type HealthResponse struct {
- Status string `json:"status"`
- }
- // MakeHealthCheckEndpoint 创建健康检查Endpoint
- func MakeHealthCheckEndpoint(svc service.Service) endpoint.Endpoint {
- return func(ctx context.Context, request interface{}) (response interface{}, err error) {
- log.Printf("helthcheck")
- status := svc.HealthCheck()
- return HealthResponse{
- Status: status,
- }, nil
- }
- }
|