第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请求?

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语言编写的数据库中间件 可以与多个数据库进行通信

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

(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的默认端口是多少?

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

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

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

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

(2) 什么是主从备份?

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

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

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

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

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;

查看用户

查看master信息(show master status)

关闭防护墙或防火墙中开发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属性的作用是什么?

数据库密码

分享/讲解/扩展思考

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

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

  1. apache httpclient 工具类_HttpClient

    HttpClient 简介 HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 ...

  2. apache httpclient 工具类_Httpclient实现文件上传、文件下载看这篇文章就够了

    前言: 使用httpclient实现文件的上传下载,废话补不多说,直接上概念上代码. 1.相关概念: 1 HTTP HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 ...

  3. apache httpclient 工具类_使用HttpClient进行服务的远程调用

    目标:使用apache公司的产品http httpcomponents 完成服务调用. HTTPClient调用服务 4:导入httpclient的依赖配置 org.apache.httpcompon ...

  4. apache httpclient 工具类_Java教程分享使用HttpClient抓取页面内容

    Java教程分享使用HttpClient抓取页面内容,使用HttpClient工具来发送Http请求 1.简介 HttpClient 是 Apache Jakarta Common 下的子项目,用来提 ...

  5. Java开发小技巧(五):HttpClient工具类

    前言 大多数Java应用程序都会通过HTTP协议来调用接口访问各种网络资源,JDK也提供了相应的HTTP工具包,但是使用起来不够方便灵活,所以我们可以利用Apache的HttpClient来封装一个具 ...

  6. 常用Apache Commons工具类备忘

    常用Apache Commons工具类 ----------------------------------------------------------------- 例如:commons.lan ...

  7. HttpClient工具类

    HttpClient工具类 package cn.sh.steven.httpclient;import com.alibaba.fastjson.JSON; import com.alibaba.f ...

  8. 使用单例模式实现自己的HttpClient工具类

    本文转载自:http://www.cnblogs.com/codingmyworld/archive/2011/08/17/2141706.html 使用单例模式实现自己的HttpClient工具类 ...

  9. 14、阿里云短信Demo演示、Http的Get请求和Post请求演示、httpClient工具类演示、发送短信模块搭建、搭建用户中心模块、完成user注册基本功能、验证码存入redis、短信验证码注册

    阿里云短信Demo演示 一.前端部分 无前端. 二.后端部分 1.创建发送短信测试模块SmsSendDemo,不用使用骨架. 2.在pom文件中引入依赖坐标 <dependency>< ...

最新文章

  1. 存储过程---角色权限叠加
  2. 如何在bash脚本中提示用户进行确认? [重复]
  3. 数据扩张:数据的杠杆作用
  4. 夺命连环问:一个 TCP 连接可以发多少个 HTTP 请求?|文末送书
  5. 实验三 lr分析器的设计与实现_实验室规划设计趋势之一灵活性|无风管通风柜的灵活性是如何实现的?...
  6. axure操作回复_Axure8.0基础教程(31-40)新手必须掌握的基础操作
  7. [转载] Python中while循环的基本用法
  8. visio2019安装教程
  9. vcpkg工具+vs2019
  10. 中国AFC自动售检票机市场发展形势与需求潜力预测报告2022-2027年
  11. 悠哈牛奶糖为什么有五种味道单独装的,而不是混合装的
  12. 移动最快apn服务器,中国移动修改APN为CMTDS提高4G网速
  13. python-igraph创建网络(图)
  14. 免费分享一个最完美的英语学习素材 Englishpod
  15. oracle修改mem为手动管理,PSV内存修改金手指插件GoHANmem v2.00下载和使用教程
  16. 企业推广常用的网络推广方法有哪些?
  17. 2022年度保密教育线上培训考试参考答案
  18. PC端使用百度地图查询经纬度
  19. 设置套接字属性和获取套接字属性,举例子设置套接字端口可重用
  20. CAD模型导入Pointwise网格导入Fluent的联合设计教程

热门文章

  1. python编程入门单例_python实现单例模式怎么写啊?
  2. 百度面试 php后端,2019.7最惨的三次面试经历-----百度PHP实习生面经
  3. Truncated SVD for faster dection
  4. 模式识别与机器学习笔记(一)
  5. Android手绘效果实现
  6. Material Design入门
  7. Ts_半分查找猜数字游戏(初始版),
  8. 使用 mitmproxy + python 做拦截代理
  9. 小甲鱼 OllyDbg 教程系列 (十二) : inline patch ( 内嵌补丁 ) 之 调用堆栈查找法
  10. Python 中 xpath 语法 与 lxml 库解析 HTML/XML 和 CSS Selector