我们创建了一个Google Cloud Function,它实质上是一个内部API。在不公开该功能的HTTP端点的情况下,其他内部Google Cloud Functions是否可以与该API函数进行通讯?
我们已经查看过PubSub,但据我们所知,您可以发送请求(说!),但您不会收到响应。
理想情况下,由于额外的安全后果,我们不想公开HTTP端点,我们正在尝试采用微服务方法,因此每个功能都是其自己的实体。
答案 0 :(得分:1)
我同情您的微服务方法,并试图保持您的服务独立。您无需打开所有HTTP功能即可完成此操作。克里斯·理查森(Chris Richardson)在其出色的网站microservices.io上描述了类似的案例:
您已应用“每个服务的数据库”模式。每个服务都有 它自己的数据库。但是,某些业务交易跨多个 服务,因此您需要一种机制来确保 服务。例如,假设您正在建立一个电子商务商店 客户有信用额度的地方。该应用程序必须确保 新订单不会超过客户的信用额度。自订单以来 并且客户位于不同的数据库中,应用程序无法简单地 使用本地ACID交易。
然后他继续:
使用此方法的电子商务应用程序将创建一个 使用由以下内容组成的基于编排的传奇的命令 步骤:
- 订单服务创建处于待处理状态的订单,并发布OrderCreated事件。
- 客户服务部门收到尝试为该订单保留信用的事件。它将发布“保留信用”事件或 CreditLimitExceeded事件。
- 订单服务接收事件并将订单状态更改为已批准或已取消。
基本上,第一个微服务不是向同步函数返回同步返回值,而是向第二个微服务发送异步的“请求事件”,第二个微服务发出第一个服务选择的“响应事件”。您将使用Cloud PubSub发送和接收消息。
您可以在他的网站上的Saga pattern下阅读有关此内容的更多信息。
答案 1 :(得分:0)
最直接的方法是将您的API封装到一个常规函数或对象中,并将这些额外的代码与每个需要使用它的函数一起部署。您甚至可能希望像npm模块中所期望的那样完全模块化代码。