go-micro-1-获取服务

micro/productService/productModels.go

package productService

type ProductModel struct {
	ProdctID    int
	ProductName string
}

func NewProduct(id int, pname string) *ProductModel {
	return &ProductModel{
		id,
		pname,
	}
}

func NewProductList(n int) []*ProductModel {
	ret := make([]*ProductModel, n)
	for i := 0; i < n; i++ {
		ret = append(ret, NewProduct(i+100, "hh"))
	}
	return ret
}

micro/index_main.go

package main

import (
	"github.com/gin-gonic/gin"
	"github.com/micro/go-micro/web"
)

func main() {
	ginRouter := gin.Default()
	ginRouter.Handle("GET", "/", func(context *gin.Context) {
		apis := make([]interface{}, 0)
		context.JSON(200, gin.H{
			"data": apis,
		})
	})
	server := web.NewService(
		web.Address(":8000"),
		web.Handler(ginRouter),
	)
	server.Run()
}

// 不注册到consul里
// go run index_main.go

micro/product_main.go

package main

import (
	"shanslang/go-cases/micro/productService"

	"github.com/gin-gonic/gin"
	"github.com/micro/go-micro/registry"
	"github.com/micro/go-micro/registry/consul"
	"github.com/micro/go-micro/web"
)

func main() {
	consulReg := consul.NewRegistry(
		registry.Addrs("consulIP:8500"),
	)

	ginRouter := gin.Default()

	v1Group := ginRouter.Group("/v1")
	{
		v1Group.Handle("GET", "/products", func(context *gin.Context) {
			context.JSON(200, productService.NewProductList(5))
		})
	}

	ginRouter.Handle("GET", "/news", func(context *gin.Context) {
		context.String(200, "new api")
	})

	server := web.NewService(
		web.Name("product"), // 服务名
		web.Address(":8001"),
		web.Handler(ginRouter),
		web.Registry(consulReg), // 注册服务到consul
	)
	server.Run()
}

micro/test.go

package main

import (
	"fmt"
	"log"

	"log"

	"github.com/micro/go-micro/client/selector"
	"github.com/micro/go-micro/registry"
	"github.com/micro/go-micro/registry/consule"
)

// 使用selector来获取服务

func main() {
	consulReg := consule.NewRegistry{
		registry.Addrs("consuleip:端口"),
	}
	getService, err := consulReg.GetService("product") // product 是之前注册到consule的服务名
	if err != nil {
		log.Fatal(err)
	}
	next := selector.Random(getService) // 如果有多个服务,则随机调用一个
	node, err := next()
	if err != nil {
		log.Fatal(err)
	}
	fmt.Println(node.Id, node.Address, node.Metadata)
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值