繁体   English   中英

在 gcp 云中使用 gorillamux function

[英]Using gorillamux in gcp cloud function

我是GoGCP的新手,所以我可能无法提供所有详细信息。 但会尝试分享我所拥有的。

我已经使用 docker 设置了一个小型微服务。 docker-compose 文件运行我的main方法,该方法通过gorrillamux注册 http 处理程序......它按预期工作。 这是示例代码

func main() {
    r := gorrilamux.NewRouter()
    r.HandleFunc("/stores/orders/{orderID}/status", handler).Methods("GET")
    http.Handle("/", r)
    fmt.Printf("%+v", http.ListenAndServe(":8080", nil))
}

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Println("------ in handler!!!")
}

使用此代码,我可以在执行docker-compose -up后调用我的服务。 我对此感到困惑的是,我将如何使用这个 gorrilla mux 在 goocle cloud function 中路由我的呼叫?

根据我的理解,对于 GCP CF,我会告诉入口点是什么方法,即,

gcloud functions deploy service-name <removing_other_details> --entry-point handler

每当收到每个请求时,此handler都会调用,它不会是ListenandServce 那么我如何使用gorillamux来做到这一点呢?

我最终想要做的是从传入请求中提取路径变量。 一种方法是使用字符串操作并从request object 中获取路径变量。 但这可能容易出错。 所以我想我是否可以使用 gorilla mux 来处理这些事情。

有任何想法吗

Google Cloud Functions 用于执行基于触发器(如 HTTP 或其他 GCP 服务器到服务器触发器)的单一用途函数。 您的 go 服务看起来更像是 HTTP 服务器,而不是单个 function。

如果你想用 Cloud Functions 建立一个微服务架构,你要做的是创建一堆不同的函数,主要由 HTTP 触发(每个函数都会自动分配一个不同的 HTTP 地址),然后从你的应用程序中调用它们而不需要任何外部 HTTP 路由器。

如果您想拥有一个分布式微服务(每个服务共享相同的 URL 但在 URL 中具有不同的端点)您想查看可以部署服务器的Appengine 您可以使用教程开始使用 Google Appengine

除了 PoWar 答案,我建议您使用 Cloud Run 而不是 App Engine。 Cloud Run 在与 Cloud Functions 相同的底层基础架构上运行,并且许多功能相似。

此外,Cloud Run 使用容器,这是 package 应用程序的当前最佳实践之一。 您可以使用文档中这样的标准Dockerfile ,然后使用 docker 构建。 或 Cloud Build,如果您尚未安装 docker

gcloud builds submit -t gcr.io/PROJECT_ID/containerName

或者,如果您不想编写或自定义Dockerfile ,您甚至可以使用 alpha 功能,这是基于 buildpack

gcloud alpha builds submit --pack=image=gcr.io/PROJECT_ID/containerName

然后在 Cloud Run 上部署您的映像

gcloud run deploy --image=gcr.io/PROJECT_ID/containerName --platform=managed --region=yourRegion myService

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM