1. 程式人生 > 實用技巧 >Java 呼叫emqx 主動刪除某個clientid連線

Java 呼叫emqx 主動刪除某個clientid連線

要刪除emqx的某個clientid連線,

1、可以通過介面直接手動刪除。

2、可以通過命令列:

查詢所有clientid
# ./bin/emqx_ctl clients list
刪除某個clientid
# ./bin/emqx_ctl clients kick <Clientid>

進行刪除。

3、還可以通過Java介面呼叫刪除:

我的emqx 版本是 4.0.4 。刪除地址為

http://127.0.0.1:18083/api/v4/clients/clientid_test

其他版本訪問地址可能有所不同,請注意。

 @Override
    public ResultDTO deleteClientId(String clientid){
        log.info(
"deleteClientId 裝置禁用,下行指令剔除原mqtt的clientid連線,入參clientid: {}", clientid); try { /* 傳入的clientid 可能有特殊字元,先進行字元轉換 */ clientid = URLEncoder.encode(clientid,"UTF-8"); } catch (UnsupportedEncodingException e) { e.printStackTrace();
return ResultDTO.getFailure(); } // 這裡拼接處要刪除clientid 地址。例:http://127.0.0.1:18083/api/v4/clients/clientid_test String url = String.format(ConstantConfig.MQTT_DASHBOARD_URL_STR, ConstantConfig.getServerConfig().getProperty(ConstantConfig.MQTT_DASHBOARD_URL).trim(), clientid ); CloseableHttpClient httpClient
= HttpClients.createDefault(); HttpDelete httpDelete = new HttpDelete(url); RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000).setConnectionRequestTimeout(35000).setSocketTimeout(60000).build(); httpDelete.setConfig(requestConfig); // 這裡emqx web的登入名密碼。例:admin:public String authString = ConstantConfig.getServerConfig().getProperty(ConstantConfig.MQTT_DASHBOARD_USER).trim()+":"+ConstantConfig.getServerConfig().getProperty(ConstantConfig.MQTT_DASHBOARD_PASSWORD).trim(); byte[] authEncBytes = Base64.encodeBase64(authString.getBytes()); String authStringEnc = new String(authEncBytes); httpDelete.setHeader("Authorization", "Basic " + authStringEnc); httpDelete.setHeader("Content-type", "application/json"); httpDelete.setHeader("DataEncoding", "UTF-8"); CloseableHttpResponse httpResponse = null; try { // 通過http請求進行訪問。 httpResponse = httpClient.execute(httpDelete); HttpEntity entity = httpResponse.getEntity(); // 獲得刪除結果 String result = EntityUtils.toString(entity); } catch (ClientProtocolException e) { e.printStackTrace(); return ResultDTO.getFailure(); } catch (IOException e) { e.printStackTrace(); return ResultDTO.getFailure(); } finally { if (httpResponse != null) { try { httpResponse.close(); } catch (IOException e) { e.printStackTrace(); } } if (null != httpClient) { try { httpClient.close(); } catch (IOException e) { e.printStackTrace(); } } } return ResultDTO.getSuccess(); }