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)
}