apache httpclient 工具类_HttpClient 和Mycat 主从节点和读写分离

1e4402829d557fc86506480674c22dd8.png

第175次(HttpClient)

学习主题:HttpClient

学习目标:

1 掌握HttpClient自定义工具以及HttpClient具体的使用

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

1. HttpClient自定义工具类的使用

(1) 如何编写一个HttpClient工具类?

HttpClient工具类

public class HttpClientUtil {

public static String doGet(String url, Map<String, String> param) {

// 创建Httpclient对象

CloseableHttpClient httpclient = HttpClients.createDefault();

String resultString = "";

CloseableHttpResponse response = null;

try {

// 创建uri

URIBuilder builder = new URIBuilder(url);

if (param != null) {

for (String key : param.keySet()) {

builder.addParameter(key, param.get(key));

}

}

URI uri = builder.build();

// 创建http GET请求

HttpGet httpGet = new HttpGet(uri);

// 执行请求

response = httpclient.execute(httpGet);

// 判断返回状态是否为200

if (response.getStatusLine().getStatusCode() == 200) {

resultString = EntityUtils.toString(response.getEntity(), "UTF-8");

}

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

if (response != null) {

response.close();

}

httpclient.close();

} catch (IOException e) {

e.printStackTrace();

}

}

return resultString;

}

public static String doGet(String url) {

return doGet(url, null);

}

public static String doPost(String url, Map<String, String> param) {

// 创建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,"utf-8");

httpPost.setEntity(entity);

}

// 执行http请求

response = httpClient.execute(httpPost);

resultString = EntityUtils.toString(response.getEntity(), "utf-8");

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

response.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return resultString;

}

public static String doPost(String url) {

return doPost(url, null);

}

public static String doPostJson(String url, String json) {

// 创建Httpclient对象

CloseableHttpClient httpClient = HttpClients.createDefault();

CloseableHttpResponse response = null;

String resultString = "";

try {

// 创建Http Post请求

HttpPost httpPost = new HttpPost(url);

// 创建请求内容

StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);

httpPost.setEntity(entity);

// 执行http请求

response = httpClient.execute(httpPost);

resultString = EntityUtils.toString(response.getEntity(), "utf-8");

} catch (Exception e) {

e.printStackTrace();

} finally {

try {

response.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return resultString;

}

}

(2) 如何通过HttpClient工具类发送Get、Post请求?

656099c3ff072436144c9e56cbf7d21e.png

2. 实战案例(对应视频194-198)

(1) 设计一个SOA模式架构的项目,通过HttpClient完成服务调用。实现对用户表的CRUD操作。(打包源码)

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

第176次(MyCat)

学习主题:MyCat

学习目标:

1 掌握什么是MyCat

2 掌握MyCat分库分表

3 掌握MyCat主从备份,读写分离

对应视频:

http://www.itbaizhan.cn/course/id/85.html

对应文档:

对应作业

3. MyCat简介

(1) 什么是MyCat?

前身时Cobar

基于java语言编写的数据库中间件 可以与多个数据库进行通信

核心时分库分表 ,配合数据库的主从模式还可以实现读写分离

6e93ef7f2c309aa7e1dd4c0dfe6f6030.png

(2) MyCat有哪些优势?

1. 数据量级

单一的Mysql其数据存储量级和操作量级有限

Mycat可以管理若干Mysql数据库,同时实现数据的存储和操作

2. 开源

Mycat时java编写的中间件,开源免费

3.市场应用占比高

4. MyCat中的概念

5.

(1) 什么是切分?

逻辑上的切分,在物理层面,是使用多库[database],多表[table]实现的切分

(2) 什么是纵向切分

就是把原本存储于一个库的数据存储到多个库上。

由于对数据库的读写都是对同一个库进行操作,所以单库并不能解决大规模并发写入的

问题。

例如,我们会建立定义数据库 workDB、商品数据库 payDB、用户数据库 userDB、日志

数据库 logDB 等,分别用于存储项目数据定义表、商品定义表、用户数据表、日志数据表等。

优点

减少增量数据写入时的锁对查询的影响

由于单表数量下降,常见的查询操作由于减少了需要扫描的记录,使得单表单次查询所需的检索行数变少,减少了磁盘io,时延变短

缺点:

无法解决单表数据量太大的问题

(3) 什么是横向切分

把原本存储于一个表的数据分块存储到多个表上,当一个表中的数据量过大时,我们可以把该表的数据按照某种规则,进行划分,然后存储到多个结构相同的表,和不同的库上

例如,我们 userDB 中的 userTable 中数据量很大,那么可以把 userDB 切分为结构相同

的多个 userDB:part0DB、part1DB 等,再将 userDB 上的 userTable,切分为很多 userTable:

userTable0、userTable1 等,然后将这些表按照一定的规则存储到多个 userDB 上。

优点:

单表的并发能力提高了,磁盘i/o性能也提高了

如果出现高并发的话,总表可以根据不同的查询,将并发压力分到不同的小表在里面.

缺点:无法实现表连接查询

(4) 什么是逻辑库-Schema

Mycat中定义的database,是逻辑上存在的,但物理上是不存在的

主要针对纵向切分提供的概念

(5) 什么是逻辑表-table

Mycat中定义的table,是逻辑上存在,物理上是不存在的

主要针对横向切分提供的概念

(6) 什么是数据主机 – dataHost

物理mysql存放的主机地址(集群 ) 可以使用主机名,IP,域名定义

(7) 什么是数据节点 – dataNode

配置物理的database(数据库),数据保存的物理节点就是dataNode (数据库)

(8) 什么是分片规则

当控制数据的时候,如何访问物理的database和table

就是访问dataHost和dataNode的算法

在Mycat处理具体的数据CRUD的时候,如何访问dataHost和dataNode的算法,如

哈希算法,crc32算法等

(9) MyCat的默认端口是多少?

1e60a9856a3f60374883b5e84bd6efaa.png

6. MyCat的使用-读写分离介绍

(1) 读写分离的原理是什么?

使用不同的数据库引擎,实现读和写的分离操作,提供所有的操作效率

一个读一个写 ,我们只需要他们的数据一致就可以

(2) 什么是主从备份?

就是一种主备模式的数据库应用

主库(master)数据和备库(slave)数据完全一致

实现数据的多重备份,保证数据的安全(读写分离的基础)

(3) 主从备份模式是如何实现数据同步的?

008cad9f30134579ac722e6cede620fa.png

7. MyCat的使用-创建MySQL的主从模式

(1) 如何在Linux中创建MySQL的主从备份模式?

Master(主库配置)

路径:/etc/my.cnf

命令:vim /etc/my.cnf

配置server_id=1 (mysql服务的唯一标识,自己写)

配置要求:

Server_id 任意配置,只要是数字即可

Server_id Master唯一标识数字必须小于Slave唯一标识数字

配置log_bin

本环境中log_bin值:master_log

开启日志功能以及日志文件命名.log_bin=master_log

变量的值就是日志文件名称,是日志文件名称的主体(就是主数据库中的Binary log如上图)

Mysql数据库自动增加文件名后缀和文件类型

重启mysql

访问mysql

Mysql -uusername -ppassword

创建用户和授权

Mysql数据库中,为不存在的用户授权,会默认创建此用户

此用户是从库访问主库使用的用户

Ip地址不能写%,因为主从备份中,当前创建的用户,是给从库Slave访问主库Master使用的,用户必须有指定的访问地址,不能是通用地址

Grant(授予) all privileges(特权) on *.* to ‘username’@’ip’identified(鉴定) by ‘password’ with grant option;

刷新

Flush privileges;

查看用户

83ab4fbf410ccb1835d264f8ae64a612.png

查看master信息(show master status)

2763bbf21299bfcf49dfcbe0a7d3e29f.png

关闭防护墙或防火墙中开发3306端口

8. MyCat的使用-安装MyCat

(1) 如何安装MyCat?

解压 至/usr/local

9. MyCat的使用-server.xml

(1) <user>节点的作用是什么?

用户配置节点

(2) <user>节点中name属性的作用是什么?

登录的用户名,也就是链接Mycat的用户名

(3) <user>节点中password属性的作用是什么?

登录的密码,也就是链接Mycat的密码

(4) <user>节点中schemas属性的作用是什么?

逻辑库名,这里会和 schema.xml 中的配置关联,多个用逗

号分开,例如需要这个用户管理两个数据库 db1,db2,则配置

db1,db2

(5) <user>节点中privileges属性的作用是什么?

配置用户针对表的增删改查的权限

(6) 在配置privileges时dml权限顺序是什么顺序?用什么表示权限的开启与禁止?

dml 权限顺序为:insert(新增),update(修改),select(查询),delete(删除),0000--> 1111,0 为

禁止权限,1 为开启权限。

10. MyCat的使用-schema.xml

(1) <schema>节点的作用是什么?

配置逻辑库的标签

(2) <schema>中name属性的作用是什么?

逻辑库名称

(3) <schema>中checkSQLschema属性的作用是什么?

是否检测SQL语法中的schema信息

(4) <schema>中sqlMaxLimit属性的作用是什么?

Mycat在执行SQL的时候,如果SQl语句中没有limit子句,自动增加limit子句,避免一次性得到过多的数据,影响效率,limit子句的限制数量默认配置为100,如果SQL中有具体的limit子句,该属性无效

(5) <table>节点的作用是什么?

定义逻辑表的标签

(6) <table>中name属性的作用是什么?

逻辑表名

(7) <table>中dataNode属性的作用是什么?

定义数据节点的标签,即物理数据库中的database名称,多个名称使用逗号分隔

(8) <table>中rule属性的作用是什么?

分片规则名称,具体的规则名称参考rule.xml配置文件

(9) <dataNode>节点的作用是什么?

定义数据节点的标签

(10) <dataNode>中name属性的作用是什么?

数据节点名称,是定义的逻辑名称从,对应具体的物理数据库database

(11) <dataNode>中dataHost属性的作用是什么?

引用dataHost标签的name值,代表使用的物理数据库所在位置和配置信息

(12) <dataNode>中database属性的作用是什么?

具体的物理数据库database名称

(13) <dataHost>节点的作用是什么?

定义数据主机的名称

(14) <dataHost>中name属性的作用是什么?

定义逻辑上的数据主机名称

(15) <dataHost>中maxCon/minCon属性的作用是什么?

最大连接数:max connections

最小链接数:min connections

(16) <dataHost>中dbType属性的作用是什么?

Mysql数据库

(17) <dataHost>中dbDriver属性的作用是什么?

数据库驱动类型 native 使用mycat提供的本地驱动

(18) <writeHost>节点的作用是什么?

写数据的数据库定义标签,实现读写分离操作

(19) <writeHost>中host属性的作用是什么?

数据库命名

(20) <writeHost>中url属性的作用是什么?

数据库访问路径

(21) <writeHost>中user属性的作用是什么?

数据库访问用户名

(22) <writeHost>中password属性的作用是什么?

访问用户密码

(23) <readHost>节点的作用是什么?

数据库配置

(24) <readHost>中host属性的作用是什么?

数据库命名

(25) <readHost>中url属性的作用是什么?

数据库访问路径

(26) <readHost>中password属性的作用是什么?

数据库密码

分享/讲解/扩展思考

点名提问从第一节课到最后一节课分别学到了什么,直到同学们把所有的知识点都说出来并且保证无误。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/506216.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

已通过os信号请求关闭服务器,redis(一)内部机制的介绍和启动过程

redis(一)内部机制的介绍和启动过程redis的基本介绍redis服务端redis客户端redis的持久化redis中的文件事件和时间时间redis的启动过程redis的基本介绍redis是一种非关系型数据库&#xff0c;采用key&#xff0c;value的形式来存储数据。key是二进制数据&#xff0c;对于value的…

datalist可以放div吗?_混凝土中能放竹子吗?可以代替钢筋吗?为何打地坪混凝土放竹子?...

大家好&#xff0c;我是专注家居和装修知识分享的家居杂坛。喜欢的就点击一下关注吧&#xff01;对于在地面上所浇筑的混凝土&#xff0c;常规有两种做法。例如&#xff0c;在混凝土中铺设钢筋&#xff0c;打成钢筋混凝土的地面&#xff0c;又或者还有一些朋友在钢混凝土中放入…

snmp协议_软件评测师写作专栏之OSI七层模型及其常见的协议11

各位学员大家好&#xff0c;大家在学习计算机网络的时候&#xff0c;OSI七层模型及其常见的协议是必考的内容。为了让大家快速掌握这方面的知识点&#xff0c;接下来就带领大家一起来学习一下&#xff01;例题&#xff1a;下面的协议中属于应用层协议的是( 1 )&#xff0c;该协…

nginx文件服务器密码登录,风的方向

说明很多时候我们服务器上的页面或者服务可能没有安全配置&#xff0c;使得服务开放的暴露在互联网中&#xff0c;很不安全。nginx可以给我们提供密码配置&#xff0c;来保护我们的服务器上的服务的安全性。配置nginx配置文件在需要配置密码的服务的相关nginx配置文件中的locat…

selenium python下载_使用Selenium、Chrome和Python下载PDF

我试着按照前面关于这个主题的文章来写&#xff0c;比如这些(post 1&#xff0c;post 2)&#xff0c;但是我还是被卡住了。我的脚本必须使用一组凭据登录到站点&#xff0c;然后通过一些下拉菜单导航以选择报表。选择报表后&#xff0c;将弹出一个新窗口&#xff0c;在该窗口中…

劲乐团u显示服务器维护,劲乐团9YOU原版服务端架设教程

我来做一个o2jam的服务端架设教程&#xff0c;希望新手能有点帮助相信你已经全的数据库文件了,其实只要里面的三个就可以了test2...o2jamtrade---onlinereport那么GO了.首先确定你已经安装好了MSSQL.如果没有.........那就先安装下......企业版安装在SQL服务器的安装盘中找到MS…

linux部署tomcat项目404_一个tomcat下部署多个项目或一个服务器部署多个tomcat

点击上方[全栈开发者社区]→右上角[...]→[设为星标⭐]♪ 点击上方绿标 收听一个tomcat下部署多个项目或一个服务器部署多个tomcat最近需要把两个项目同时部署到服务器上&#xff0c;于是研究了一下&#xff0c;页借鉴了很多别人的方法&#xff0c;把过程记录下来&#xff0c;以…

科学计数法_第一章 科学计数法与近似数

生活中&#xff0c;我们常常遇到一些较大的数&#xff0c;如10000000、3450000000等.利用科学计数法表示某些较大的数可以免去一些不必要的麻烦&#xff0c;尤其是遇到一些乘法运算时&#xff0c;如20000000245000000.科学记数法表示数时&#xff0c;不改变数的符号&#xff0c…

python调用浏览器打开网页_python调用浏览器,实现刷网页浏览小程序!

Python 和放大镜的二进制代码私信小编007即可自动获取大量Python视频教程以及各类PDF&#xff01;python 打开浏览器&#xff0c;可以做简单的刷网页的小程序 and 其他有想象力的程序。不过仅供学习&#xff0c;勿用非法用途。python的webbrowser模块支持对浏览器进行一些操作主…

# 傅立叶变换 画曲线_让你永远忘不了的傅立叶变换解析

使用联想链条和几何直观&#xff0c;辅以从实际需求衍生概念的思考模式&#xff0c;详解什么是傅立叶变换&#xff0c;为什么要做傅立叶变换等&#xff0c;帮助记忆和理解&#xff0c;目的当然是标题所说&#xff1a;让你永远忘不了傅立叶变换这个公式。另&#xff0c;这篇博客…

bat批处理执行python_通过批处理来运行python程序

》准备》》在所用的python源程序最前面指定该源程序要用那种可执行程序去运行它》》例如&#xff1a;#!/bin/sh shell脚本#!/usr/bin/perl perl脚本#!/usr/bin/python python脚本#!/usr/bin/python3 python3脚本#!/usr/bin/python2 python2脚本》》我的程序使用的解释器》》》#…

messagehub讲解_艾舜杰SAP Data Hub 数据服务总线技术深度讲解

原标题&#xff1a;艾舜杰SAP Data Hub 数据服务总线技术深度讲解艾舜杰SAP Data Hub 是一个多方面的数据编排解决方案, 旨在解决在不断增长的分布式数据环境中的挑战。它的关键功能包括&#xff1a;数据管道、治理和架构管理。解决方案可弹性扩展, 可编排并自动化处理不同数据…

select报错 spark_spark-sql master on yarn 模式运行 select count(*) 报错日志

启动hive --service metastore启动 dfs yarn[rootbigdatastorm bin]# ./spark-sql --master yarn --deploy-mode client --driver-memory 512m --executor-memory 512m --total-executor-cores 1spark-sql>select count(*) ;LogSLF4J: Class path contains multiple SLF4J …

python字符串填充_填充函数(Python)字符串.zfi

我想更改下面的Python函数&#xff0c;以涵盖我的business_代码需要填充的所有情况。string.zfillPython函数处理此异常&#xff0c;将填充到左侧直到达到给定的宽度&#xff0c;但我以前从未使用过它。在#function for formating business codesdef formatBusinessCodes(code)…

找不到天隆虚拟机_玩转虚拟机,教你如何装系统

最近小白系统收到很多小伙伴的私信想要知道虚拟机如何安装系统&#xff0c;那么今天小白系统整理了下虚拟机安装系统的教程&#xff0c;下面一起看下吧。虚拟机安装系统适合什么人群呢&#xff1f;1、如果你新买的电脑不支持安装Win7系统&#xff0c;那么装个虚拟机吧&#xff…

ios 主题切换 思路_IOS主题切换ThemeManager

#import "ThemeManager.h"#define kDefaultThemeName "默认主题"#define kThemeName "kThemeName"implementation ThemeManagerstatic ThemeManager *instance nil;(ThemeManager *)shareInstance{static dispatch_once_t onceToken…

从数据类型 nvarchar 转换为 numeric 时出错_JS入门篇(三):javascript的数据类型详解...

JavaScript的数据类型分为两大类&#xff0c;基本数据类型和复杂数据类型。基本数据类型&#xff1a;Undefined、Null、Boolean、Number、String。复杂数据类型&#xff1a;Object。(1)Undefined类型Undefined 类型只有一个值&#xff0c;即特殊的 undefined。在使用 var 声明变…

下载keep运动软件_Keep运动软件官网下载_Keep运动最新官网下载_18183软件下载

Keep运动官网下载怎么样&#xff1f;不妨来18183下载试试&#xff01;1.8亿运动爱好者都在Keep体验健身、跑步、骑行、计步功能&#xff0c;ta就是移动健身教练和饮食指导老师。Keep帮助人们随时随地练就完美身材&#xff0c;开启健康生活&#xff0c;就从Keep开始。18183软件下…

python 小程序搜索排名优化_python3 搜索关键字小程序

#!/usr/bin/python3#luckimport sysfilename input(‘请输入您要搜索的路径及文档名称:‘)if len(filename) 0:sys.exit(‘不能为空!‘)while True:mubiao input(‘请输入您要搜索的关键词:‘)if mubiao ‘exit‘:sys.exit(‘欢迎使用搜索系统!‘)if len(mubiao) 0:contin…

idea添加scala环境_idea怎么在线安装scala并且启动'

一&#xff0e;环境配置&#xff1a;1.1 安装JDK&#xff0c;配置环境变量。1.2下载Scala,并配置环境变量1.3安装playframe2框架&#xff1a;下载play并配置环境变量或者点击browse all versions选择更多版本&#xff0c;我安装的是play2.2.4。查看运行是否安装成功&#xff0c…