micro gin 微应用方案
使用 Gin 作为微应用解决方案,可以通过模块化设计和服务间通信来实现。以下是一个基本的 Gin 微应用架构示例,展示如何使用 Gin 构建多服务应用,并通过主应用进行路由和管理。
目录结构
your_project/
├── main-app/
│ ├── main.go
│ └── router.go
├── service1/
│ ├── main.go
│ ├── handler.go
│ └── router.go
└── service2/
├── main.go
├─ ─ handler.go
└── router.go
主应用(main-app)
主应用将作为网关,负责路由请求到不同的子服务。
main.go
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func main() {
r := gin.Default()
service1Router := setupService1Router()
service2Router := setupService2Router()
// 路由到服务1
r.Any("/service1/*any", func(c *gin.Context) {
proxy(c, service1Router)
})
// 路由到服务2
r.Any("/service2/*any", func(c *gin.Context) {
proxy(c, service2Router)
})
r.Run(":8080")
}
func proxy(c *gin.Context, target *gin.Engine) {
target.HandleContext(c)
}
router.go
package main
import (
"github.com/gin-gonic/gin"
"service1"
"service2"
)
func setupService1Router() *gin.Engine {
r := gin.New()
service1.RegisterRoutes(r)
return r
}
func setupService2Router() *gin.Engine {
r := gin.New()
service2.RegisterRoutes(r)
return r
}
服务 1(service1)
服务 1 负责处理特定的业务逻辑。
main.go
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
RegisterRoutes(r)
r.Run(":8081")
}
handler.go
package service1
import (
"github.com/gin-gonic/gin"
"net/http"
)
func HelloHandler(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "Hello from Service 1",
})
}
router.go
package service1
import (
"github.com/gin-gonic/gin"
)
func RegisterRoutes(r *gin.Engine) {
r.GET("/hello", HelloHandler)
}
服务 2(service2)
服务 2 负责处理另一部分的业务逻辑。
main.go
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
RegisterRoutes(r)
r.Run(":8082")
}
handler.go
package service2
import (
"github.com/gin-gonic/gin"
"net/http"
)
func HelloHandler(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "Hello from Service 2",
})
}
router.go
package service2
import (
"github.com/gin-gonic/gin"
)
func RegisterRoutes(r *gin.Engine) {
r.GET("/hello", HelloHandler)
}
运行示例
- 启动服务 1:
cd service1
go run main.go
- 启动服务 2:
cd service2
go run main.go
- 启动主应用:
cd main-app
go run main.go
测试
你可以通过以下 URL 测试服务:
- 访问服务 1:
http://localhost:8080/service1/hello - 访问服务 2:
http://localhost:8080/service2/hello
总结
通过这种方式,你可以使用 Gin 构建一个模块化的微应用架构。主应用作为网关,负责路由和管理请求,而各个子服务则独立处理各自的业务逻辑。这种架构既保留了微服务的独立性,又简化了服务间的通信和管理。