12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- package service
- import (
- "context"
- "encoding/json"
- "errors"
- "github.com/afex/hystrix-go/hystrix"
- "github.com/longjoy/micro-go-course/section24/goods/common"
- "io/ioutil"
- "net/http"
- "net/url"
- )
- type GoodsDetailVO struct {
- Id string
- Name string
- Comments common.CommentListVO
- }
- type Service interface {
- GetGoodsDetail(ctx context.Context, id string) (GoodsDetailVO, error)
- }
- func NewGoodsServiceImpl() Service {
- return &GoodsDetailServiceImpl{}
- }
- type GoodsDetailServiceImpl struct{}
- func (service *GoodsDetailServiceImpl) GetGoodsDetail(ctx context.Context, id string) (GoodsDetailVO, error) {
- detail := GoodsDetailVO{Id: id, Name: "Name"}
- var err error
- commonResult, err := GetGoodsComments(id)
- detail.Comments = commonResult.Detail
- if err != nil {
- return detail, err
- }
- return detail, nil
- }
- func GetGoodsComments(id string) (common.CommentResult, error) {
- var result common.CommentResult
- serviceName := "Comments"
- err := hystrix.Do(serviceName, func() error {
- requestUrl := url.URL{
- Scheme: "http",
- Host: "127.0.0.1" + ":" + "8081",
- Path: "/comments/detail",
- RawQuery: "id=" + id,
- }
- resp, err := http.Get(requestUrl.String())
- if err != nil {
- return err
- }
- body, _ := ioutil.ReadAll(resp.Body)
- jsonErr := json.Unmarshal(body, &result)
- if jsonErr != nil {
- return jsonErr
- }
- return nil
- }, func(e error) error {
- // 断路器打开时的处理逻辑,本示例是直接返回错误提示
- return errors.New("Http errors!")
- })
- if err == nil {
- return result, nil
- } else {
- return result, err
- }
- }
|