前几天,发愁怎么样把flink实时计算的结果展示到UI上,所以就有了我接下来研究的 flink httpsink
依赖:
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.5</version>
</dependency>
代码:
public class HttpSink implements SinkFunction<SdkLampStatusDto> {
@Override
public void invoke(SdkLampStatusDto data, Context context) throws Exception {
CloseableHttpClient client = HttpClients.createDefault();
URIBuilder uriBuilder = new URIBuilder("http://localhost:8080/doGetControllerTwo?crossId="+data.getCrossId() + "&phaseNo="+data.getPhaseNo() +"&lampStatus="+data.getLampStatus() + "&lastSecond="+data.getLastSecond());
HttpPost httpPost = new HttpPost();
HttpGet httpGet = new HttpGet(uriBuilder.build());
httpGet.addHeader("Content-Type", "application/json");
RequestConfig requestConfig = RequestConfig
.custom()
.setConnectTimeout(35000)
.setConnectionRequestTimeout(35000)
.setSocketTimeout(60000)
.build();
httpPost.setConfig(requestConfig);
CloseableHttpResponse response = client.execute(httpGet);
Thread.sleep(500);
int statusCode = response.getStatusLine().getStatusCode();
HttpEntity entity = response.getEntity();
String str = EntityUtils.toString(entity);
response.close();
client.close();
}
}
接下来测试: 这里你需要写个springboot的服务接口,接口的地址和flink httpsink中的地址是一样的,
测试代码部分: springboot 8080
@GetMapping("/doGetControllerTwo")
public void getData(String crossId,Integer phaseNo,Integer lampStatus,Integer lastSecond){
System.out.println(crossId+" "+phaseNo+" "+lampStatus + " "+lastSecond);
}