https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
名称 | 链接 | 备注 |
---|---|---|
项目主页 | 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协议 |
faas-cli new faas-currenttime --lang java11 -p bolingcavalry
[root@node1 20]# faas-cli new faas-currenttime --lang java11 -p bolingcavalry 2020/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.git 2020/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.git Folder: faas-currenttime created. ___ _____ ____ / _ \ _ __ ___ _ __ | ___|_ _ __ _/ ___| | | | | '_ \ / _ \ '_ \| |_ / _` |/ _` \___ \ | |_| | |_) | __/ | | | _| (_| | (_| |___) | \___/| .__/ \___|_| |_|_| \__,_|\__,_|____/ |_| Function created in folder: faas-currenttime Stack file written: faas-currenttime.yml Notes: You have created a function using the java11 template which uses an LTS version of the OpenJDK.
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
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; } }
package com.openfaas.function; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.openfaas.model.IRequest; import com.openfaas.model.IResponse; import com.openfaas.model.Response; import org.apache.commons.lang3.StringUtils; import java.lang.management.ManagementFactory; import java.net.Inet4Address; import java.net.InetAddress; import java.net.NetworkInterface; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; public class Handler extends com.openfaas.model.AbstractHandler { private static final String PARAM_USER_NAME = "name"; private static final String RESPONSE_TEMPLETE = "Hello %s, response from [%s], PID [%s], %s"; private ObjectMapper mapper = new ObjectMapper(); /** * 获取本机IP地址 * @return */ public static String getIpAddress() { try { Enumeration<NetworkInterface> allNetInterfaces = NetworkInterface.getNetworkInterfaces(); InetAddress ip = null; while (allNetInterfaces.hasMoreElements()) { NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement(); if (netInterface.isLoopback() || netInterface.isVirtual() || !netInterface.isUp()) { continue; } else { Enumeration<InetAddress> addresses = netInterface.getInetAddresses(); while (addresses.hasMoreElements()) { ip = addresses.nextElement(); if (ip != null && ip instanceof Inet4Address) { return ip.getHostAddress(); } } } } } catch (Exception e) { System.err.println("IP地址获取失败" + e.toString()); } return ""; } /** * 返回当前进程ID * @return */ private static String getPID() { return ManagementFactory .getRuntimeMXBean() .getName() .split("@")[0]; } private String getUserName(IRequest req) { // 如果从请求body中取不到userName,就用 String userName = null; try { Map<String, Object> mapFromStr = mapper.readValue(req.getBody(), new TypeReference<Map<String, Object>>() {}); if(null!=mapFromStr && mapFromStr.containsKey(PARAM_USER_NAME)) { userName = String.valueOf(mapFromStr.get(PARAM_USER_NAME)); } } catch (Exception e) { e.printStackTrace(); } // 如果从请求body中取不到userName,就给个默认值 if(StringUtils.isBlank(userName)) { userName = "anonymous"; } return userName; } public IResponse Handle(IRequest req) { String userName = getUserName(req); System.out.println("1. ---" + userName); // 返回信息带上当前JVM所在机器的IP、进程号、时间 String message = String.format(RESPONSE_TEMPLETE, userName, getIpAddress(), getPID(), new SimpleDateFormat( "yyyy-MM-dd hh:mm:ss" ).format(new Date())); System.out.println("2. ---" + message); // 响应内容也是JSON格式,所以先存入map,然后再序列化 Map<String, Object> rlt = new HashMap<>(); rlt.put("success", true); rlt.put("message", message); String rltStr = null; try { rltStr = mapper.writeValueAsString(rlt); } catch (Exception e) { e.printStackTrace(); } Response res = new Response(); res.setContentType("application/json;charset=utf-8"); res.setBody(rltStr); return res; } }
faas-cli build -f ./faas-currenttime.yml
Step 27/30 : ENV fprocess="java -XX:+UseContainerSupport com.openfaas.entrypoint.App" ---> Running in 0f50636cc747 Removing intermediate container 0f50636cc747 ---> 54a5c9a193c8 Step 28/30 : EXPOSE 8080 ---> Running in 3252f165af15 Removing intermediate container 3252f165af15 ---> c05afc826ec5 Step 29/30 : HEALTHCHECK --interval=5s CMD [ -e /tmp/.lock ] || exit 1 ---> Running in 4106410be0a2 Removing intermediate container 4106410be0a2 ---> 6d95b73b5f33 Step 30/30 : CMD ["fwatchdog"] ---> Running in 1606dbcd7003 Removing intermediate container 1606dbcd7003 ---> 99a519ab82fd Successfully built 99a519ab82fd Successfully tagged bolingcavalry/faas-currenttime:latest Image: bolingcavalry/faas-currenttime:latest built. [0] < Building faas-currenttime done in 34.94s. [0] Worker done. Total build time: 34.94s
docker push bolingcavalry/faas-currenttime:latest
faas-cli deploy -f faas-currenttime.yml
[root@node1 20]# faas-cli deploy -f faas-currenttime.yml Deploying: faas-currenttime. WARNING! Communication is not secure, please consider using HTTPS. Letsencrypt.org offers free SSL/TLS certificates. Deployed. 202 Accepted. URL: http://192.168.133.187:31112/function/faas-currenttime.openfaas-fn
[root@node1 20]# curl \ > -H "Content-Type: application/json" \ > -X POST \ > --data '{"name":"Jerry}' \ > http://192.168.133.187:31112/function/faas-currenttime {"success":true,"message":"Hello anonymous, response from [10.233.90.79], PID [11], 2020-11-20 02:14:46"}
[root@node1 20]# faas-cli deploy -f faas-currenttime.yml Deploying: faas-currenttime. WARNING! Communication is not secure, please consider using HTTPS. Letsencrypt.org offers free SSL/TLS certificates. Deployed. 202 Accepted. URL: http://192.168.133.187:31112/function/faas-currenttime.openfaas-fn
faas-cli remove -f faas-currenttime.yml
微信搜索「程序员欣宸」,我是欣宸,期待与您一同畅游Java世界...
https://github.com/zq2599/blog_demos