[go-micro实战]12 在gin中调用构建的rpc服务

该博客展示了如何使用Go Micro创建一个HTTP服务,包括导入必要的库、初始化服务、注册到Consul服务发现、设置元数据以及处理HTTP请求。通过 Gin 框架和Micro的web包来实现API接口,服务间调用使用了ProdService获取产品列表。
摘要由CSDN通过智能技术生成

目录结构

 prod_main.go

package main

import (
	"context"
	"flag"
	"fmt"
	"gitee.com/Hind3ight/easy-go-micro/go-micro/Services"
	"github.com/gin-gonic/gin"
	"github.com/micro/go-micro"
	"github.com/micro/go-micro/registry"
	"github.com/micro/go-micro/web"
	"github.com/micro/go-plugins/registry/consul" // micro版本变迁
	"log"
)

func main() {
	consulReg := consul.NewRegistry(registry.Addrs("192.168.31.246:8500"))
	r := gin.Default()
	httpServer := web.NewService(
		web.Name("httpService"),
		//web.Address(flagParser()),
		web.Address(":8001"),
		web.Handler(r),
		web.Registry(consulReg),
		web.Metadata(map[string]string{"protocol" : "http"}),// 为注册的服务添加Metadata,指定请求协议为http
	)
	myService := micro.NewService(micro.Name("prodService.client"))
	prodService := Services.NewProdService("prodService", myService.Client())
	v1Group := r.Group("/v1")
	{
		v1Group.Handle("POST", "/prods", func(c *gin.Context) {
			//Server.GetProdListServer(c, *prodService)
			var prodReq Services.ProdRequest
			err := c.Bind(&prodReq)
			if err != nil {
				c.JSON(500, gin.H{
					"status": err.Error(),
				})
			} else {
				prodRes, _ := prodService.GetProdList(context.Background(), &prodReq)
				c.JSON(200, gin.H{"data": prodRes.Data})
			}
		})
	}
	err := httpServer.Init()
	if err != nil {
		log.Fatalln("Server Init error: ", err)
	}
	err = httpServer.Run()
	if err != nil {
		log.Fatal("Server Run error: ", err)
	}
}

// simple 自定义命令行解析
func flagParser() string {
	serverAddress := flag.String("server_address", ":8080", "服务端口")
	flag.Parse()
	fmt.Println("端口号:", *serverAddress)
	return *serverAddress
}

Server/prodServer.go

package Server

import (
	"context"
	"gitee.com/Hind3ight/easy-go-micro/go-micro/Services"
	"github.com/gin-gonic/gin"
)

func GetProdListServer(c *gin.Context, prodService Services.ProdService) {
	var prodReq Services.ProdRequest
	err := c.Bind(&prodReq)
	if err != nil {
		c.JSON(500, gin.H{
			"status": err.Error(),
		})
	} else {
		prodRes, _ := prodService.GetProdList(context.Background(), &prodReq)
		c.JSON(200, gin.H{"data": prodRes.Data})
	}
}

启动服务,上节课的服务也要启动,postman进行测试

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值