2021年7月28日星期三

OpenFaaS实战之三:Java函数

欢迎访问我的GitHub

https://github.com/zq2599/blog_demos

内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;

OpenFaaS实战系列文章链接

  1. 部署
  2. 函数入门
  3. Java函数
  4. 模板操作(template)
  5. 大话watchdog
  6. of-watchdog(为性能而生)
  7. java11模板解析
  8. OpenFaaS实战之八:自制模板(maven+jdk8)
  9. OpenFaaS实战之九:终篇,自制模板(springboot+maven+jdk8)

本篇概览

  1. 本文是《OpenFaaS实战》系列的第三篇,经过前文实战,咱们掌握了函数开发和部署的要领,作为一名Java程序员,当然迫切的希望用Java编写OpenFaaS函数,于是就有了本文;
  2. 本文开发一个Java函数,功能是解析请求body中的JSON字符串,再加上JVM进程ID、IP地址、当前时间一起拼成字符串,包装在JSON中返回;
  3. 平时写java代码会用到各种二方库,这里引入jackson的库,作为OpenFaaS添加依赖的参考;

源码下载

  • 本篇实战中的源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blog_demos):
名称链接备注
项目主页https://github.com/zq2599/blog_demos该项目在GitHub上的主页
git仓库地址(https)https://github.com/zq2599/blog_demos.git该项目源码的仓库地址,https协议
git仓库地址(ssh)git@github.com:zq2599/blog_demos.git该项目源码的仓库地址,ssh协议
  • 这个git项目中有多个文件夹,本章的应用在openfaas文件夹下,如下图红框所示:

在这里插入图片描述

  • openfaas里面有多个子文件夹,本篇的源码在currenttime中,如下图红框:

在这里插入图片描述

创建函数

  1. 执行以下命令,即可创建名为faas-currenttime的函数,此函数的镜像前缀是bolingcavalry,语言类型为java11:
faas-cli new faas-currenttime --lang java11 -p bolingcavalry
  1. 控制台响应如下:
[root@node1 20]# faas-cli new faas-currenttime --lang java11 -p bolingcavalry2020/11/20 15:47:50 No templates found in current directory.2020/11/20 15:47:50 Attempting to expand templates from https://github.com/openfaas/templates.git2020/11/20 15:47:56 Fetched 12 template(s) : [csharp dockerfile go java11 java11-vert-x node node12 php7 python python3 python3-debian ruby] from https://github.com/openfaas/templates.gitFolder: faas-currenttime created. ___     _____   ____ / _ \ _ __ ___ _ __ | ___|_ _ __ _/ ___|| | | | '_ \ / _ \ '_ \| |_ / _` |/ _` \___ \| |_| | |_) | __/ | | | _| (_| | (_| |___) | \___/| .__/ \___|_| |_|_| \__,_|\__,_|____/  |_|Function created in folder: faas-currenttimeStack file written: faas-currenttime.ymlNotes:You have created a function using the java11 template which uses an LTSversion of the OpenJDK.
  1. 当前目录已经新增了文件faas-currenttime.yml和文件夹faas-currenttime
  2. 文件夹faas-currenttime的内容如下,可见是个gradle工程:
faas-currenttime├── build.gradle├── gradle│ └── wrapper│  ├── gradle-wrapper.jar│  └── gradle-wrapper.properties├── gradlew├── gradlew.bat├── settings.gradle└── src ├── main │ └── java │  └── com │   └── openfaas │    └── function │     └── Handler.java └── test  └── java   └── HandlerTest.java
  1. 打开build.gradle文件,添加下图红框中的内容,即jackson和common库的依赖:

在这里插入图片描述

  1. 进入文件夹faas-currenttime/src/main/java/com/openfaas/function/,可见已创建了默认的业务功能类Handler.java,打开看看OpenFaaS给的默认代码啥样的,如下所示:
package com.openfaas.function;import com.openfaas.model.IHandler;import com.openfaas.model.IResponse;import com.openfaas.model.IRequest;import com.openfaas.model.Response;public class Handler extends com.openfaas.model.AbstractHandler { public IResponse Handle(IRequest req) {  Response res = new Response();   res.setBody("Hello, world!");   return res; }}
  1. 把Handler.java的内容用以下代码替换掉,替换后的函数,其功能是取得请求参数,再把当前JVM的进程ID、IP地址、当前时间都拼接到一个字符串中返回,需要重点关注的有两点:将请求参数反序列化成Map实例,以及将Map序列化成JSON字符串返回:
package com.openfaas.function;import com.faster
  • 至此编码完成,接下来是制作镜像和部署;

部署

  1. 在faas-currenttime.yml所在目录执行以下命令,即可开始制作镜像,制作过程中会有gradle的编译过程,如果编译失败会中断镜像制作:
faas-cli build -f ./faas-currenttime.yml
  1. 镜像制作成功时,控制台输出类似如下信息:
Step 27/30 : ENV fprocess="java -XX:+UseContainerSupport com.openfaas.entrypoint.App"---> Running in 0f50636cc747Removing intermediate container 0f50636cc747---> 54a5c9a193c8Step 28/30 : EXPOSE 8080---> Running in 3252f165af15Removing intermediate container 3252f165af15---> c05afc826ec5Step 29/30 : HEALTHCHECK --interval=5s CMD [ -e /tmp/.lock ] || exit 1---> Running in 4106410be0a2Removing intermediate container 4106410be0a2---> 6d95b73b5f33Step 30/30 : CMD ["fwatchdog"]---> Running in 1606dbcd7003Removing intermediate container 1606dbcd7003---> 99a519ab82fdSuccessfully built 99a519ab82fdSuccessfully tagged bolingcavalry/faas-currenttime:latestImage: bolingcavalry/faas-currenttime:latest built.[0] < Building faas-currenttime done in 34.94s.[0] Worker done.Total build time: 34.94s
  1. 将镜像推送到镜像仓库,以便Kubernetes可以下载到此镜像,我这里用的是hub.docker.com,因为我的ID是bolingcavalry,所执行以下命令即可推送成功:
docker push bolingcavalry/faas-currenttime:latest<......

原文转载:http://www.shaoqun.com/a/901489.html

跨境电商:https://www.ikjzd.com/

ask me:https://www.ikjzd.com/w/2459

环球市场:https://www.ikjzd.com/w/1762

马士基集团:https://www.ikjzd.com/w/1296


欢迎访问我的GitHubhttps://github.com/zq2599/blog_demos内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;OpenFaaS实战系列文章链接部署函数入门Java函数模板操作(template)大话watchdogof-watchdog(为性能而生)java11模板解析OpenFaaS实战之八:自制模板(ma
邮政电话:https://www.ikjzd.com/w/202
云南有哪些好玩的地方?云南最美的地方?:http://www.30bags.com/a/402878.html
云南有哪些旅游景点?:http://www.30bags.com/a/401904.html
云南有哪些旅游特色?:http://www.30bags.com/a/428790.html
云南有哪些美食街?:http://www.30bags.com/a/401596.html
口述小姑两瓣湿乎乎:和姑姑发生了不该发生的关系:http://lady.shaoqun.com/a/73806.html
口述:邻居在电梯里夺走我第一次:http://lady.shaoqun.com/m/a/17890.html
口述:我意乱情迷爱上老妈的闺蜜老妈闺蜜儿子:http://lady.shaoqun.com/m/a/43131.html
深圳锦绣中华8月份门票价格及优惠:http://www.30bags.com/a/528705.html
深圳锦绣中华8月份夜场免费吗:http://www.30bags.com/a/528706.html
室友实现怀孕的技巧:http://lady.shaoqun.com/a/438488.html
李晨谈与范冰冰睡觉的细节。内容太刺激了。范冰冰资本化的尴尬:http://lady.shaoqun.com/a/438489.html

没有评论:

发表评论