nacos中RaftProxy的原理和作用是什么
发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,本篇内容主要讲解"nacos中RaftProxy的原理和作用是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"nacos中RaftProxy的原理和作用
千家信息网最后更新 2025年02月04日nacos中RaftProxy的原理和作用是什么
本篇内容主要讲解"nacos中RaftProxy的原理和作用是什么",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"nacos中RaftProxy的原理和作用是什么"吧!
序
本文主要研究一下nacos的RaftProxy
RaftProxy
nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/consistency/persistent/raft/RaftProxy.java
@Componentpublic class RaftProxy { public void proxyGET(String server, String api, Mapparams) throws Exception { // do proxy if (!server.contains(UtilsAndCommons.IP_PORT_SPLITER)) { server = server + UtilsAndCommons.IP_PORT_SPLITER + RunningConfig.getServerPort(); } String url = "http://" + server + RunningConfig.getContextPath() + api; HttpClient.HttpResult result = HttpClient.httpGet(url, null, params); if (result.code != HttpURLConnection.HTTP_OK) { throw new IllegalStateException("leader failed, caused by: " + result.content); } } public void proxy(String server, String api, Map params, HttpMethod method) throws Exception { // do proxy if (!server.contains(UtilsAndCommons.IP_PORT_SPLITER)) { server = server + UtilsAndCommons.IP_PORT_SPLITER + RunningConfig.getServerPort(); } String url = "http://" + server + RunningConfig.getContextPath() + api; HttpClient.HttpResult result; switch (method) { case GET: result = HttpClient.httpGet(url, null, params); break; case POST: result = HttpClient.httpPost(url, null, params); break; case DELETE: result = HttpClient.httpDelete(url, null, params); break; default: throw new RuntimeException("unsupported method:" + method); } if (result.code != HttpURLConnection.HTTP_OK) { throw new IllegalStateException("leader failed, caused by: " + result.content); } } public void proxyPostLarge(String server, String api, String content, Map headers) throws Exception { // do proxy if (!server.contains(UtilsAndCommons.IP_PORT_SPLITER)) { server = server + UtilsAndCommons.IP_PORT_SPLITER + RunningConfig.getServerPort(); } String url = "http://" + server + RunningConfig.getContextPath() + api; HttpClient.HttpResult result = HttpClient.httpPostLarge(url, headers, content); if (result.code != HttpURLConnection.HTTP_OK) { throw new IllegalStateException("leader failed, caused by: " + result.content); } }}
RaftProxy提供了proxyGET、proxy、proxyPostLarge三个方法,其中proxy接收了HttpMethod,可以处理GET、POST、DELETE
HttpClient
nacos-1.1.3/naming/src/main/java/com/alibaba/nacos/naming/misc/HttpClient.java
public class HttpClient { private static final int TIME_OUT_MILLIS = 10000; private static final int CON_TIME_OUT_MILLIS = 5000; private static AsyncHttpClient asyncHttpClient; private static CloseableHttpClient postClient; static { AsyncHttpClientConfig.Builder builder = new AsyncHttpClientConfig.Builder(); builder.setMaximumConnectionsTotal(-1); builder.setMaximumConnectionsPerHost(128); builder.setAllowPoolingConnection(true); builder.setFollowRedirects(false); builder.setIdleConnectionTimeoutInMs(TIME_OUT_MILLIS); builder.setConnectionTimeoutInMs(CON_TIME_OUT_MILLIS); builder.setCompressionEnabled(true); builder.setIOThreadMultiplier(1); builder.setMaxRequestRetry(0); builder.setUserAgent(UtilsAndCommons.SERVER_VERSION); asyncHttpClient = new AsyncHttpClient(builder.build()); HttpClientBuilder builder2 = HttpClients.custom(); builder2.setUserAgent(UtilsAndCommons.SERVER_VERSION); builder2.setConnectionTimeToLive(CON_TIME_OUT_MILLIS, TimeUnit.MILLISECONDS); builder2.setMaxConnPerRoute(-1); builder2.setMaxConnTotal(-1); builder2.disableAutomaticRetries(); postClient = builder2.build(); } //...... public static HttpResult httpPost(String url, Listheaders, Map paramValues) { return httpPost(url, headers, paramValues, "UTF-8"); } public static HttpResult httpPost(String url, List headers, Map paramValues, String encoding) { try { HttpPost httpost = new HttpPost(url); RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(5000).setConnectTimeout(5000).setSocketTimeout(5000).setRedirectsEnabled(true).setMaxRedirects(5).build(); httpost.setConfig(requestConfig); List nvps = new ArrayList (); for (Map.Entry entry : paramValues.entrySet()) { nvps.add(new BasicNameValuePair(entry.getKey(), entry.getValue())); } httpost.setEntity(new UrlEncodedFormEntity(nvps, encoding)); HttpResponse response = postClient.execute(httpost); HttpEntity entity = response.getEntity(); String charset = encoding; if (entity.getContentType() != null) { HeaderElement[] headerElements = entity.getContentType().getElements(); if (headerElements != null && headerElements.length > 0 && headerElements[0] != null && headerElements[0].getParameterByName("charset") != null) { charset = headerElements[0].getParameterByName("charset").getValue(); } } return new HttpResult(response.getStatusLine().getStatusCode(), IOUtils.toString(entity.getContent(), charset), Collections. emptyMap()); } catch (Throwable e) { return new HttpResult(500, e.toString(), Collections. emptyMap()); } } public static HttpResult httpPostLarge(String url, Map headers, String content) { try { HttpClientBuilder builder = HttpClients.custom(); builder.setUserAgent(UtilsAndCommons.SERVER_VERSION); builder.setConnectionTimeToLive(500, TimeUnit.MILLISECONDS); CloseableHttpClient httpClient = builder.build(); HttpPost httpost = new HttpPost(url); for (Map.Entry entry : headers.entrySet()) { httpost.setHeader(entry.getKey(), entry.getValue()); } httpost.setEntity(new StringEntity(content, ContentType.create("application/json", "UTF-8"))); HttpResponse response = httpClient.execute(httpost); HttpEntity entity = response.getEntity(); HeaderElement[] headerElements = entity.getContentType().getElements(); String charset = headerElements[0].getParameterByName("charset").getValue(); return new HttpResult(response.getStatusLine().getStatusCode(), IOUtils.toString(entity.getContent(), charset), Collections. emptyMap()); } catch (Exception e) { return new HttpResult(500, e.toString(), Collections. emptyMap()); } } //......}
httpPost的connectionRequestTimeout为5秒,connectTimeout为5秒,socketTimeout为5秒;httpPostLarge设置了500毫秒的connectionTimeToLive
小结
RaftProxy提供了proxyGET、proxy、proxyPostLarge三个方法,其中proxy接收了HttpMethod,可以处理GET、POST、DELETE
到此,相信大家对"nacos中RaftProxy的原理和作用是什么"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
作用
原理
方法
三个
内容
UTF-8
处理
学习
实用
更深
兴趣
实用性
实际
小结
操作简单
更多
朋友
网站
频道
查询
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
哈市坐标软件开发有限公司
去实业做软件开发有前途嘛
每天一分钟网络安全
兰州市安宁区网络安全
机房服务器故障
电脑软件开发最低底薪
世界银行数据库的英文
政务外网网络安全态势
翡翠严品app软件开发
本子封面设计软件开发
数据库 打开远程连接
国内有哪些网络安全立法
网络网络技术有限公司
软件开发项目中的三种风险
中搜网络技术 骗
全国网络安全中心
数据库表txt怎么写
包河区专业性网络技术服务哪家好
网络安全解决方案的质量
安徽网络技术服务优点
数据库主变量的作用是什么
如何设置wifi网络安全性
qq代理登陆服务器
杭州从本网络技术有限公司
.net数据库缓存
工信部网络安全试点示范公示
如何连接到云服务器
熟悉数据结构及数据库原理
服务器后台管理交互原型图
如何从服务器外观看型号