Skip to main content

此示例通过引入Hutool包,编写Groovy脚本来绘制指定文本二维码,并通过API对外开放。

流程图

image-20221207174110506

组件配置

  • 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

流程模板

下载模板