rest - Cloud Foundry 任务 - 从服务实例调用 REST API
问题描述
有没有办法从 Cloud Foundry 任务(命令)调用在 Cloud Foundry 中运行的服务实例的 REST API。
例如,我有一个my-rest-app
在 PCF 中运行的 Spring Boot 应用程序实例。它有一个端点/sayHello
。使用cf run-task my-test-app curl /sayHello
?
解决方案
您可以这样做,但您需要告诉任务如何找到给定的服务。
您的任务在与应用程序不同的容器中运行,因此您无法使用http://localhost:$PORT
,因为它们是分开的。这意味着您需要获取该任务的应用程序的 URL。你可以通过几种不同的方式做到这一点。
访问其他应用程序时
要访问不同的应用程序(即 app1 的任务 -> 应用程序 2),您需要传入目标应用程序的 URL。这可以通过环境变量或绑定服务来完成。
任务和服务共享相同的环境变量和绑定服务,因此只需在您的应用程序上设置一个环境变量或将服务绑定到您的应用程序,您就可以通过任务访问它。
例如:
cf set-env my-cool-app URL 'http://www.example.com/'
cf restart my-cool-app
cf run-task my-cool-app 'curl "$URL"'
确保正确引用最后一个命令,以便$URL
不在本地评估。
或者
cf cups my-service -p url # populate the url when prompted
cf bind-service my-cool-app my-service
cf restart my-cool-app
cf run-task my-cool-app 'curl $(echo "$VCAP_SERVICES" | jq -r ".[\"user-provided\"][0].credentials.url")'
这有点复杂,但会将请求的 URL 从VCAP_SERVICES
绑定服务信息所在的 env 变量中提取出来。
访问同一个应用程序时
如果您尝试访问同一个应用程序(即 app1 的任务 -> app1),您可以从中提取 URL,VCAP_APPLICATION
这样您就不需要环境变量或绑定服务。
例如:
cf run-task my-cool-app 'curl https://$(echo "$VCAP_APPLICATION" | jq -r ".uris[0]")'
这将提取映射到应用程序的第一个 URI。如果您有多个路由绑定到您的应用程序,您可能需要调整它以选择不同的 URI。如果您的路线有与之关联的路径,则这应该包括路线路径。
如果您需要访问/actuator/health
应用程序下的特定子路径,您只需将其附加到此处获取的 URI 的末尾即可。
推荐阅读
- reactjs - React 和 TypeScript - 组件
- objective-c - 为什么我不能访问这个指针的值。目标c
- c# - Selenium C# - Web 元素属性存在但找不到?
- c# - 如何添加不使用属性的服务器端验证规则?
- facebook - 使用带有永久页面访问令牌的 Instagram Graph Api 仅适用于某些帐户
- java - 结合 2 个区间
- sql-server - 创建一个只能通过代码更新的只读列
- python - 只能将 str (不是“字节”)连接到 str
- system-verilog - 我想在系统verilog的函数中反转并返回一个数组,我尝试了下面的代码,但出现以下错误
- jquery - 为 Share Point 2013 Web 部件选择 AngularJS 与 jQuery/Ajax