在PCF-DEV中将Native C / C ++ Binary部署为独立的微服务

时间:2019-07-17 14:04:23

标签: c microservices executable cloudfoundry binaryfiles

我有一个用例,将已编译的Native C可执行文件作为微服务部署在PCF上:

编译后的可执行文件的调用方式如下:     “ mycbinary输入文件输出文件” 并在手术后终止。因此,微服务不是LRP。 在PCF看来,这可能是一个任务,但它并不依赖于其他微服务的存在。 它必须是独立的微服务,但不能长期运行。

请问如何用PCF实现此用例,即我有什么可能性? 当二进制文件完成工作后,微服务会终止,直到再次需要它为止。

为了测试我可以做什么的可行性,我尝试将一些已编译的C代码推送到PCF-DEV。 我正在使用cf push,因为这是我对PCF上独立应用程序的理解

cf push HelloServiceAgain -c'./helloworld'-b https://github.com/cloudfoundry/binary-buildpack.git -u进程--no-route

推送失败并显示以下消息:

正在等待应用启动... 开始失败

提示:有关详细信息,请使用'cf.exe日志HelloService --recent'

在日志文件中有以下条目:     OUT进程已崩溃,其类型为:“ web”

然后我推送了另一个需要参数的命令。这开始没有问题,但是日志文件中的消息相同

cf push HelloServiceGCC -c'gcc -o ./hellogcc ./hello1.c'-b https://github.com/cloudfoundry/binary-buildpack.git -u进程--no-route

请问我还有以下其他问题:

1)消息“进程已崩溃,类型:“ web”是否为错误?”并且为什么多次调用该命令?  2)成功的第二次推送应该创建一个编译的hellogcc可执行文件,我希望在同一根目录中看到该可执行文件。在哪里创建输出文件,如何从本地文件系统访问输出文件?

很抱歉问了这么多问题,但我是PCF业务的新手。

1 个答案:

答案 0 :(得分:0)

  

因此,微服务不是LRP。在PCF看来,这可能是一个任务,但它并不依赖于其他微服务的存在。它必须是独立的微服务,但不能长期运行。

这绝对是一项任务。不用依赖其他服务就可以了。任务只是一个简单的过程,它在有限的时间内运行,为成功则退出0,否则为错误退出。

  

cf push HelloServiceAgain -c'./helloworld'-b https://github.com/cloudfoundry/binary-buildpack.git -u进程--no-route

我建议使用以下微小变化:cf push HelloServiceAgain -c 'sleep 5000' -b binary_buildpack -u process --no-route

这将...

  1. 假设编译后的二进制文件在当前目录中。
  2. 使用系统提供的二进制buildpack,应该没问题。
  3. 将运行状况检查设置为基于流程,并且不设置任何路由。
  4. 运行sleep,仅用于通过运行状况检查。

这样做的目的是使您的应用程序上载和登台。我们将命令设置为sleep,因为我们只需要暂存和启动应用程序即可(这是一种确保暂存发生的解决方法,您至少必须在此时运行一次才能触发暂存)。应用启动后,只需运行cf stop并停止应用即可。由于您所要做的只是任务,因此不需要该应用程序即可继续运行。如果您更新应用程序,则确实需要再次执行此过程,因为这将保留您的更改。

这时,您可以cf run-task并执行程序。例如:cf run-task app-name './helloworld'

希望有帮助!