NIFI使用InvokeHTTP发送http请求

说明

这里介绍四种平时常用的http请求方法:GET、POST、PUT、DELETE。

在官方的介绍文档中关于InvokeHTTP处理器的描述是这么说的:

An HTTP client processor which can interact with a configurable HTTP Endpoint. The destination URL and HTTP Method are configurable. FlowFile attributes are converted to HTTP headers and the FlowFile contents are included as the body of the request (if the HTTP Method is PUT, POST or PATCH).

大致意思是说:这是一个可以与 HTTP 端点交互的 HTTP 客户端处理器。处理器中的 URL 和 HTTP Method是可以配置的。处理器中的属性会转换为 HTTP的请求头,如果请求方法是 PUT、POST 或 PATCH那么处理器的内容将作为请求的正文(请求体)包含在内。


测试接口

这里给了几个处理器测试用到的接口,主别对应GET、POST、PUT、DELETE请求,测试的代码不涉及业务逻辑,只是简单用来配合测试处理器使用。

package com.example.common.resp;

import com.example.common.enums.RespEnum;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;


@AllArgsConstructor
@NoArgsConstructor
@Data
public class Result {
    private Integer code;
    private String message;
    private Object data;


    // 省略部分代码。。。

    public static Result ok(Object data) {
        return ok(RespEnum.SUCCESS.getCode(), RespEnum.SUCCESS.getMessage(), data);
    }

}



=====================================================================================
测试接口
=====================================================================================



package com.example.redis.controller;

import com.alibaba.fastjson2.JSONObject;
import com.example.common.resp.Result;
import org.springframework.web.bind.annotation.*;

import java.util.Map;


@RestController
@RequestMapping("/test")
public class TestController {

    @GetMapping("/{id}")
    public Result getById(@PathVariable String id, @RequestParam Map<String, Object> query) {
        JSONObject res = new JSONObject();
        res.put("method", "GET");
        res.put("desc", "这个是get方法");
        res.put("id", id);
        res.put("query", query);
        return Result.ok(res);
    }

    @PostMapping("")
    public Result add(@RequestBody JSONObject body) {
        JSONObject res = new JSONObject();
        res.put("method", "POST");
        res.put("desc", "这个是post方法");
        res.put("body", body);
        return Result.ok(res);
    }

    @PutMapping("/{id}")
    public Result editById(@PathVariable String id, @RequestBody JSONObject body) {
        JSONObject res = new JSONObject();
        res.put("method", "PUT");
        res.put("desc", "这个是put方法");
        res.put("id", id);
        res.put("body", body);
        return Result.ok(res);
    }

    @DeleteMapping("/{id}")
    public Result deleteById(@PathVariable String id) {
        JSONObject res = new JSONObject();
        res.put("method", "DELETE");
        res.put("desc", "这个是delete方法");
        res.put("id", id);
        return Result.ok(res);
    }
}

发送GET请求

添加处理器:InvokeHTTP

点击工具栏左上角的Processor拖拽到画布中,筛选出InvokeHTTP处理器添加到画布中

配置处理器

双击添加的处理器,切换到SETTINGS,给处理器起个名字

起好名字后切换到PROPERTIES,配置以下内容,最后点击APPLY

添加自定义请求头

如果需要给请求头添加自定义属性的话,直接点击右上角的加号+添加即可,例如我这里添加一个myToken的请求头,这个时候发送的请求头里面便会携带该参数

测试处理器

方便测试,将InvokeHTTP处理器设置为10秒执行一次

同理添加LogAttribute处理器到画布中

修改LogAttribute处理器的配置,将PROPERTIES选项卡中Log Payload的属性值改为true

连接两个处理器,关联关系选择Response,最后点击ADD

将第一个InvokeHTTP处理器自身的RELATIONSHIPS除了Response之外全部选择terminate

将第二个LogAttribute处理器自身的的RELATIONSHIPS选择terminate

处理器全部显示如图所示则表示没问题,可以运行了

启动两个处理器,在画布空白位置鼠标右键,选择Start

在nifi的日志中可以看到每隔十秒钟便会打印一次接口返回的结果

发送POST请求

发送POST请求携带请求体数据我们需要借助另外一个处理器:GenerateFlowFile

添加处理器:GenerateFlowFile

配置处理器

双击添加的处理器,在SETTINGS选项卡中给处理器起个名称

切换到PROPERTIES选项卡,然后分别配置Custom Text和Mime Type两个属性的值,其他属性的值默认即可。

Custom Text:(官方解释)If Data Format is text and if Unique FlowFiles is false, then this custom text will be used as content of the generated FlowFiles and the File Size will be ignored。通俗的说就是如果Custom Text中的值是文本类型的并且Unique FlowFiles属性的值是false,则Custom Text中的值会当做流文件的内容,这样Custom Text中的值传到下一个处理器InvokeHTTP的时候便会作为请求体数据传到接口中。

添加处理器:InvokeHTTP

和发送GET请求一样,添加InvokeHTTP处理器,然后配置以下内容,post请求中的请求体来自于上一个处理器的内容

测试处理器

将第一个处理器GenerateFlowFile和第二个处理器InvokeHTTP连接,关联关系选择success

继续将第二个处理器InvokeHTTP和之前添加过的LogAttribute处理器进行连接,关联关系选择Response

同样的将InvokeHTTP处理器自身的RELATIONSHIPS除了Response之外全部选择terminate

同样的方便测试,将第一个处理器GenerateFlowFile设置为10秒执行一次,然后将POST方法对应的三个处理器分别启动(鼠标放到对应的处理器上然后右键选择Start启动)

查看nifi的日志,可以看到每隔十秒钟便会打印一次接口返回的结果

发送PUT请求

put请求和post请求是类似,处理器按照post请求的重新添加一遍即可,只需要将InvokeHTTP处理器里面的请求方法改为PUT,URL改为对应的请求路径即可。这里不再重复添加,下面是添加好之后的

测试结果

发送DELETE请求

put请求和get请求是类似,处理器按照get请求的重新添加一遍即可,只需要将InvokeHTTP处理器里面的请求方法改为DELETE,URL改为对应的请求路径即可。这里不再重复添加,下面是添加好之后的

测试结果

 结束语

以上便是NIFI中关于InvokeHTTP的使用,如果有问题欢迎大家评论。

以下是使用 Apache NiFi 搭建简单数据流的 demo 介绍: 1. 安装 NiFi:首先需要下载并安装 NiFi。可以从官方网站下载最新版本的 NiFi,或者从 Apache 的镜像站点下载。安装完成后,启动 NiFi。 2. 创建数据流:在 NiFi 的主界面中,点击左侧的 Processors 标签,可以看到各种可用的处理器。选择一个 GetFile 处理器,将其拖拽到右侧的工作区。然后双击 GetFile 处理器,进入其配置界面,设置输入文件夹路径,然后点击 Apply。 3. 添加处理器:在工作区中,再次拖拽一个处理器,例如 ConvertJSONToSQL 处理器。将其连接到 GetFile 处理器的输出端口。然后双击 ConvertJSONToSQL 处理器,进入其配置界面,设置输出数据库连接信息和 SQL 语句,然后点击 Apply。注意,需要预先安装并配置相应的数据库。 4. 运行数据流:在工作区中,点击右上角的运行按钮,NiFi 将开始运行数据流。它会自动从输入文件夹中读取数据,将其转换为 SQL 语句,并将结果插入到数据库中。 5. 监控数据流:在 NiFi 的主界面中,可以看到各种监控信息,包括处理器的状态、数据流的流量、错误信息等。可以使用这些信息来监控和调试数据流。 这是一个简单的 NiFi 数据流示例,演示了如何使用 NiFi 来实现数据处理和转换。根据实际需求,可以添加更多的处理器,以实现更复杂的数据转换和处理任务。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值