大佬教程收集整理的这篇文章主要介绍了OpenFaaS实战之七:java11模板解析,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
https://github.com/zq2599/blog_demos
内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;
[root@node1 template]# tree java11
java11
├── build.gradle
├── Dockerfile
├── function
│ ├── 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
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── README.md
├── setTings.gradle
└── template.yml
@H_616_91@
# 使用multi-stage builds特性,将整个镜像构建分为多个阶段
# 名为builder的镜像里面会生成java代码编译构建出来的结果
FROM openjdk:11-jdk-slim as builder
ENV GRADLE_VER=6.1.1
# 应用更新,并且安装后面要用到的应用
RUN apt-get update -qqy \
&& apt-get install -qqy \
--no-install-recommends \
curl \
ca-certificates \
unzip
# 下载指定版本的gradle,并解压,再删除压缩包(避免镜像体积变大)
RUN mkdir -p /opt/ && cd /opt/ \
&& echo "Downloading gradle.." \
&& curl -sSfL "https://services.gradle.org/diStributions/gradle-${GRADLE_VER}-bin.zip" -o gradle-$GRADLE_VER-bin.zip \
&& unzip gradle-$GRADLE_VER-bin.zip -d /opt/ \
&& rm gradle-$GRADLE_VER-bin.zip
# Export some environment variables
ENV GRADLE_HOME=/opt/gradle-$GRADLE_VER/
ENV PATH=$PATH:$GRADLE_HOME/bin
RUN mkdir -p /home/app/libs
ENV GRADLE_OPTS="-Dorg.gradle.daemon=false"
WORKDIR /home/app
# 把编译构建涉及的所有内容都复制到镜像的/home/app/目录,
# 包括配置文件、java源码等
COPY . /home/app/
# 开始编译构建
RUN gradle build
# 打印文件列表
RUN find .
# 名为watchdog的镜像,注意基础镜像是openfaas/of-watchdog
FROM openfaas/of-watchdog:0.7.6 as watchdog
# 这个ship才是最终的镜像,前面的builder和watchdog都是为ship准备内容的
# 为了控制体积,ship里面是jre,而非jdk
FROM openjdk:11-jre-slim as ship
RUN apt-get update -qqy \
&& apt-get install -qqy \
--no-install-recommends \
unzip
# 为了安全起见不使用root帐号,这里增加名为app的群组和用户
RUN addgroup --system app \
&& adduser --system --ingroup app app
# 从watchdog镜像获取可执行文件fwatchdog
COPY --from=watchdog /fwatchdog /usr/bin/fwatchdog
# 增加可执行权限
RUN chmod +x /usr/bin/fwatchdog
# 设置执行命令的目录
WORKDIR /home/app
# 从builder获取整个gradle项目的构建结果
COPY --from=builder /home/app/function/build/diStributions/function-1.0.zip ./function-1.0.zip
# 执行运行容器进程的帐号是app
user app
# 解压构建结果
RUN unzip ./function-1.0.zip
WORKDIR /home/app/
# of-watchdog转发的地址,也就是微服务监听的地址
ENV upstream_url="http://127.0.0.1:8082"
# of-watchdog的模式
ENV mode="http"
# 微服务是java应用,要用到这个classpath
ENV CLASSPATH="/home/app/function-1.0/function-1.0.jar:/home/app/function-1.0/lib/*"
# 启动微服务的命令
ENV fprocess="java -XX:+UseContainerSupport com.openfaas.entrypoint.App"
# 对外暴露的端口,of-watchdog监听的
EXPOSE 8080
# 监控检查
HEALTHchecK --interval=5s CMD [ -e /tmp/.lock ] || exit 1
# 容器启动时执行的命令,既启动of-watchdog
CMD ["fwatchdog"]
@H_616_91@
java -XX:+UseContainerSupport com.openfaas.entrypoint.App
@H_616_91@
public static void main(String[] args) throws Exception {
// 监听8082端口,和Dockerfile中of-watchdog转发请求的端口保持一致
int port = 8082;
// handler是真正处理请求的实例
HandlerProvider p = HandlerProvider.geTinstance();
IHandler handler = p.getHandler();
// 配置监听对象,并将handler绑定过来
httpServer server = httpServer.create(new InetSocketAddress(port), 0);
InvokeHandler invokeHandler = new InvokeHandler(handler);
// 设置path,开始监听
server.createContext("/", invokeHandler);
server.setExecutor(null); // creates a default executor
server.start();
}
@H_616_91@
// 把request内容封装到Irequest实例中
Irequest req = new request(requestBody, reqHeadersmap,t.getrequestuRI().getRawQuery(), t.getrequestuRI().getPath());
// 执行业务逻辑处理请求
IResponse res = this.handler.Handle(req);
// 得到处理后的结果
String response = res.getBody();
...
@H_616_91@
最后做个小结,将前面展开的思路收敛起来,如下图:
看到这里,对于java11模板的内部实现及其执行原理,相信在您眼里应该没有什么秘密了,为了制作更好用的java模板,咱们已经做了充分准备,接下来的文章,请随欣宸一起实战自定义java模板;
以上是大佬教程为你收集整理的OpenFaaS实战之七:java11模板解析全部内容,希望文章能够帮你解决OpenFaaS实战之七:java11模板解析所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。