你好,我想到一个异步方案,不知道是否能满足需求,可供参考: 1、接收端,我同意Caizhi Weng的说法,还是要另起一个http server服务a:把请求的参数放入消息队列中,同时服务a通知调用方请求已收到。 2、flink从消息队列中消费数据,并将参数进行解析,业务逻辑处理。 3、sink端可以考虑继承RichSinkFunction类,将解析结果再通过调用对方的http服务传回去,在invoke方法中post数据即可。
sink端可以参考这个代码 public class HttpResultSink extends RichSinkFunction { private CloseableHttpClient client; @Override public void open(Configuration parameters) throws Exception { client = HttpClients.createDefault(); } @Override public void close() throws Exception { client.close(); } @Override public void invoke(RequesResult requesResult, Context context) { // 拼接请求 HttpPost httpPost = new HttpPost("http://yourip:8088/open/api/pushInfo"); // 拼接请求头与请求体 String json = JSON.toJSONString(requesResult); httpPost.setHeader("Accept", "application/json"); httpPost.setHeader("Content-type", "application/json; charset=UTF-8"); httpPost.setEntity(entity); // 发送请求 CloseableHttpResponse response = client.execute(httpPost); } } 如果直接用flink接受http请求,处理请求,再将请求结果同步返回,在一个作业中完成,我觉得难度比较大,这种同步方案不太适合flink处理,更适合spring技术栈做? | | 杨成凯 | | yangchengkai2...@163.com github:forrestlmj | 在2022年2月9日 17:30,张锴<zk357794...@gmail.com> 写道: 我觉得这种方式是可行的,请问一下我应该如何去做,有没有一些资料参考一下呢 Caizhi Weng <tsreape...@gmail.com> 于2022年2月9日周三 16:15写道: Hi! Flink 目前没有 http server source / sink。这是一个 OLAP 的需求吗?从描述的需求来看,一种更加合理的方式应该是有一个专门的 http server 接受请求,调用 Flink API 运行一个 Flink 作业(Flink SQL 可以运行 select 语句),再将结果返回给调用方。 张锴 <zk357794...@gmail.com> 于2022年2月9日周三 14:28写道: 业务需求:通过http请求方式将参数传给flink,将参数带入flink程序再把结果以json的形式返回。请问一下以这种方式实时计算,flink是否支持? flink版本:1.12.1