远程调用接口并传参数

it2023-04-09  72

同步

客户端

public String numberOfCalls(String certificateName, String certificateContent,String url) throws Exception{ url +="8800/dataService/numberOfCalls"; logger.info(" 管理门户接口url:"+url); // "http://192.168.100.59:8800/dataService/numberOfCalls"; Map<String, String> params = new HashMap<>(1); params.put("certificateName", certificateName); params.put("certificateContent", certificateContent); // Map<String, Object> headers = new HashMap<>(); // headers.put("Authorization","Basic d2ViQXBwOndlYkFwcA=="); try { String result = HttpClientUtils.doPost(url,params,null); logger.info("result:"+result); } catch (Exception e) { logger.error("网关记录接口访问次数远程请求异常:"+e.getMessage()); throw e; } return "ok"; }

工具端

/** * 同步请求 * @param url * @param param * @param headers * @return */ public static String doPost(String url, Map<String, String> param,Map<String, Object> headers) { // 创建Httpclient对象 CloseableHttpClient httpClient = HttpClients.createDefault(); CloseableHttpResponse response = null; String resultString = ""; try { // 创建Http Post请求 HttpPost httpPost = new HttpPost(url); // 创建参数列表 if (param != null) { List<NameValuePair> paramList = new ArrayList<>(); for (String key : param.keySet()) { paramList.add(new BasicNameValuePair(key, param.get(key))); } // 模拟表单 UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList); httpPost.setEntity(entity); } if(headers != null){ Set<String> keys = headers.keySet(); for (String key : keys) { httpPost.setHeader(key, headers.get(key).toString()); } } // 执行http请求 response = httpClient.execute(httpPost); resultString = EntityUtils.toString(response.getEntity(), "utf-8"); } catch (Exception e) { e.printStackTrace(); } finally { try { if(response!= null){ response.close(); } httpClient.close(); } catch (IOException e1) { e.printStackTrace(); } } return resultString; }

服务端-接收请求

@LogAnnotation("记录接口调用次数") @ApiOperation(value = "记录接口调用次数", notes = "记录接口调用次数", httpMethod = "POST") @PostMapping(value = "/numberOfCalls") @ResponseBody public HttpResult numberOfCalls(HttpServletRequest request ) { HttpResult res = null; String certificateName = request.getParameter("certificateName"); String certificateContent = request.getParameter("certificateContent"); logger.info("通过网关记录微服务接口访问次数 ertificateName:"+certificateName+ " certificateContent:"+certificateContent); try{ String count = apiGrantService.updateNumberOfCalls(certificateName, certificateContent); if("0".equals(count)){ return HttpResult.error("记录接口调用次数失败:无接口访问权限","记录接口调用次数失败:无接口访问权限"); } res = HttpResult.ok("记录接口调用次数成功 count:"+count); return res; } catch (Exception e) { logger.error("记录接口调用次数失败", e); return HttpResult.error("记录接口调用次数失败", CommonUtils.getExceptionMessage(e)); } }

异步

客户端

/** * 卸载微服务 * @param apiUrl * @return */ public String uninstall(String apiUrl) throws IOException { apiUrl = getIpPort(apiUrl); String url = "http://" + apiUrl + "/remote/shutdown"; logger.info(" 关闭接口url:"+url); Map<String, String> params = new HashMap<>(1); params.put("key", "55ac348750604eb593c493abf736686f"); // HttpClientUtils.doGet(url,params); // String result = HttpClientUtils.doPost(url,params); String postParam = JSON.toJSONString(params); try { HttpClientUtils.postHttpStringDataAsyn(url,postParam); } catch (IOException e) { e.printStackTrace(); throw e; } return "ok"; }

工具方法

public static StringBuffer postHttpStringDataAsyn(String URL, String postStr) throws IOException { // 发送异步post , 非阻塞, 发送完无需等待结果返回 AsyncRestTemplate client = new AsyncRestTemplate(); ListenableFuture<ResponseEntity<String>> listenableFuture = client.postForEntity(URL, new HttpEntity<Object>(postStr), String.class); listenableFuture.addCallback(new SuccessCallback<ResponseEntity<String>>() { @Override public void onSuccess(ResponseEntity<String> result) { System.out.println("("+result.getStatusCode()+ ":"+result.getStatusCode().getReasonPhrase()+ "):"+result.getBody()); } }, new FailureCallback() { @Override public void onFailure(Throwable ex) { ex.printStackTrace(); System.out.println(ex); } }); return new StringBuffer("finish postHttpStringDataAsyn post"); }

服务端-接收端

@PostMapping(value = "/remote/shutdown") @ResponseBody public void shutdown(HttpServletRequest request,@RequestBody String data) { // System.out.println("data:"+data); JSONObject jsonObject = JSONObject.parseObject(data); String key = jsonObject.get("key")+""; System.out.println("key:"+key); if ("55ac348750604eb593c493abf736686f".equals(key)) { System.out.println(" 服务卸载中!"); System.exit(0); } }

 

最新回复(0)