此示例通过引入Hutool包,编写Groovy脚本来绘制指定文本二维码,并通过API对外开放。
流程图
组件配置
HandleHttpRequest - 启动HTTP监听服务
属性
监听端口:20091
在该端口上启动一个服务,要求端口不能被其他服务占用
HTTP会话服务:二维码创建/解析-StandardHttpContextMap
关联HandleHttpRequest和HandleHttpReponse的控制器服务
API注册:启用
是否允许将该编排流程注册到管理平台,启用后才能在管理平台将该流程注册为后端
请求路径:/create
该流程注册到管理平台后的API路径
ExecuteScript – 执行创建二维码业务逻辑的Groovy脚本
属性
脚本引擎:Groovy
指定脚本语言类型
脚本内容:
@Grab(group='cn.hutool', module='hutool-extra', version='5.8.0')
@Grab(group='com.google.zxing', module='core', version='3.5.0')
import org.apache.commons.io.IOUtils
import org.apache.nifi.processor.io.StreamCallback
import java.nio.charset.StandardCharsets
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.extra.qrcode.QrConfig;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import java.awt.Color;
def flowFile = session.get()
if (flowFile == null) {
return
}
def text = flowFile.getAttribute("http.query.param.text")
def type = flowFile.getAttribute("http.query.param.type")
def size = flowFile.getAttribute("http.query.param.size")
if (size.equals(null) || size=="") {
size = 300
}else{
if (Integer.parseInt(size) < 10) {
size = 10
}
if (Integer.parseInt(size) > 1000) {
size = 1000
}
}
try {
flowFile = session.write(flowFile, {inputStream, outputStream ->
QrConfig config = new QrConfig(size, size);
config.setMargin(2);
config.setErrorCorrection(ErrorCorrectionLevel.H);
if ("2".equals(type)) {
def qrcode = QrCodeUtil.generatePng(text, config);
outputStream.write(qrcode)
}else {
def qrcode = QrCodeUtil.generateAsBase64(text, config, "png");
outputStream.write(qrcode.getBytes(StandardCharsets.UTF_8))
}
} as StreamCallback)
session.transfer(flowFile, REL_SUCCESS);
} catch (Exception ex) {
flowFile = session.putAttribute(flowFile, "generate.error", ex.getMessage())
session.transfer(flowFile, REL_FAILURE)
}
HandleHttpResponse – 响应HTTP请求
属性
HTTP状态码:200
响应给客户端的HTTP请求状态码,注意并非响应Body内容里面的code字段
HTTP会话服务:二维码创建/解析-StandardHttpContextMap
关联HandleHttpRequest和HandleHttpReponse的控制器服务
设置
- 禁用连线
- failure
- success
- 禁用连线
控制器服务配置
- StandardHttpContextMap – 关联HandleHttpRequest和HandleHttpReponse