Java:使用Toxiproxy模拟各种连接问题
用Toxiproxy和Java的HttpURLConnection
模拟各种连接问题,以查看产生了什么样的错误:连接超时vs.读取超时vs.连接被拒绝…。
结果:
系统:openjdk 11.0.1 2018-10-16
(.setConnectTimeout 1)
=> java.net.SocketTimeoutException:连接超时(.setReadTimeout 1)
=>javax.net.ssl.SSLProtocolException: Read timed out
在HTTPS上javax.net.ssl.SSLProtocolException: Read timed out
,java.net.SocketTimeoutException: Read timed out
在HTTP上java.net.SocketTimeoutException: Read timed out
(或Toxiproxy,延迟或超时为5s)- 在端口上没有监听=> java.net.ConnectException:连接被拒绝
- 未配置上游的Toxiproxy(即,端口已打开,但连接没有问题)=>
javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake
HTTPS上javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake
,java.net.SocketTimeoutException: Read timed out
HTTPjava.net.SocketTimeoutException: Read timed out
- limit_data_downstream => java.io.IOException:过早的EOF
(我还无法模拟(但)是“连接中断/断开”。)
设置
先决条件
要在/etc/hosts
添加:
127.0.0.1 proxied.google.com
毒物替代品设置
开始使用抗氧化剂:
docker pull shopify/toxiproxy
# BEFORE we `run` it: case #3
docker run --rm -p 5555:5555 -p 6666:6666 -p 8474:8474 --name toxiproxy -it shopify/toxiproxy
配置它(我们可以只发布到:8474
但是使用CLI更容易):
$ docker exec -it toxiproxy /bin/sh
/ # cd /go/bin/
# ./toxiproxy-cli create google -l 0.0.0.0:6666 -u www.google.com:443 # BEFORE this is run: case #4
# ./toxiproxy-cli toxic add google -t latency -a latency=5000 # case #2
Added downstream latency toxic 'latency_downstream' on proxy 'google
# ./toxiproxy-cli toxic remove google -n latency_downstream
Removed toxic 'latency_downstream' on proxy 'google'# ./toxiproxy-cli toxic add google -t timeout -a timeout=2000 # case #2
Added downstream timeout toxic 'timeout_downstream' on proxy 'google'
# ./toxiproxy-cli toxic remove google -n timeout_downstream
Removed toxic 'timeout_downstream' on proxy 'google'# ./toxiproxy-cli toxic add google -t limit_data -a bytes=5000 # case #5
Added downstream limit_data toxic 'limit_data_downstream' on proxy 'google'
测试代码
(import '[java.net URL HttpURLConnection])
(->(doto ^HttpURLConnection (.openConnection (URL. "https://proxied.google.com:6666/"));; BEWARE: JVM *must* be started with `-Dsun.net.http.allowRestrictedHeaders=true` to allow setting the Host:(.setRequestProperty "Host" "www.google.com")(.setConnectTimeout 1000)(.setReadTimeout 1000))(.getInputStream)slurp)
巴克特
阅读我的toxiproxy模拟网络超时以了解为什么我们需要打扰/etc/hosts
和Host
标头。
翻译自: https://www.javacodegeeks.com/2018/11/java-simulating-connection-problems.html
Java:使用Toxiproxy模拟各种连接问题相关推荐
- java模拟连接超时_Java:使用Toxiproxy模拟各种连接问题
java模拟连接超时 用Toxiproxy和Java的HttpURLConnection模拟各种连接问题,以查看产生了什么样的错误:连接超时vs.读取超时vs.连接被拒绝-. 结果: 系统:openj ...
- Java 使用 URLConnection 模拟 Http Get和Post 提交
2019独角兽企业重金招聘Python工程师标准>>> Java 使用 URLConnection 模拟 Http Get和Post 提交. 1.URLConnectionHelpe ...
- Java单元测试之模拟利器-使用PowerMock进行Mock测试
首页 国产Linux Linux命令 openSUSE ArchLinux Slackware FreeBSD Ubuntu CentOS Fedora Debian PHP教程 在线教程 登录 注册 ...
- 使用java网络编程模拟简单网络即时通信
使用java网络编程模拟简单网络即时通信 通信流程图: 解析: 1.在上图中我们可以看出对于任何一个客户端,都由两部分构成,发送端和接收端(分别由两个线程来维系) 2.客户端在每一次请求链接时都会轮询 ...
- Netty 模拟百万连接
我们知道单机的端口最多65536,除去系统使用的端口, 留给程序使用的也就6万个端口, 在需要对单机做长连接压力测试的时候,如果要测60W的长连接并发,就得找10台机器,而一般情况下我们并没有这么 ...
- 深入Java虚拟机——类型装载、连接(转)
来自http://hi.baidu.com/holder/item/c38abf02de14c7d31ff046e0 Java虚拟机通过装载.连接和初始化一个Java类型,使该类型可以被正在运行的Ja ...
- Mockito:一个强大的用于Java开发的模拟测试框架
介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用Mockito的Java示例. 模拟(Mock)的概念 在软件开发的世界之外, "mock"一 ...
- 无忧考吧2017二级java_二级Java模拟软件|无忧考吧二级Java语言程序设计模拟软件下载 v2017.03官方版 - 121下载站...
无忧考吧二级Java语言程序设计模拟软件是专为准备考试二级JAVA语言的朋友打造的一款在线模拟软件,二级JAVA语言的考试理论上是非常简单的, 大家只需要掌握基本的语法和一些简单的编程就可能了,这款软 ...
- c ibatis mysql实例_[Java教程]java程序中的ibatis连接mySql的基本实例
[Java教程]java程序中的ibatis连接mySql的基本实例 0 2015-03-16 00:01:32 属性文件:SqlMap.properties1 driver=com.mysql.jd ...
最新文章
- 前端应该了解的颜色的寓意
- 微信小程序code 换取 session_key
- python_day2_数据格式
- ORCLE 表中列的修改(非常全面哦)
- 使用AspectJ和Spring简化了AOP
- 第3章 文件IO | 001 文件描述符
- Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法。
- C/C++编程(尾积相乘)
- mongovue mysql_MongoVUE模糊查询,更新单个字段
- python 拼音库_改造Python中文拼音扩展库pypinyin补充自定义声母全过程
- pointcloud90度分割+球面投影(pcl+ros+python)
- openwrt定时任务 2021-10-08
- 网页形式的php抓取文件,PHP 抓取网页源文件
- 病毒RNA提取:EpiQuik 病毒RNA提取纯化试剂盒方案
- JavaScript基础随笔
- 齐岳定制|Cyclopropene-PEG-Xylan|环丙烯-聚乙二醇-木聚糖
- setTimeout()和setInterval()的区别和转换
- 大二芯TS、大三芯TRS及卡侬头音频接口的使用
- List<?>和list的区别
- 【2017秋季校园招聘笔经面经专题汇总】