用Toxiproxy和Java的HttpURLConnection模拟各种连接问题,以查看产生了什么样的错误:连接超时vs.读取超时vs.连接被拒绝…。

结果:

系统:openjdk 11.0.1 2018-10-16

  1. (.setConnectTimeout 1) => java.net.SocketTimeoutException:连接超时
  2. (.setReadTimeout 1) => javax.net.ssl.SSLProtocolException: Read timed out在HTTPS上javax.net.ssl.SSLProtocolException: Read timed outjava.net.SocketTimeoutException: Read timed out在HTTP上java.net.SocketTimeoutException: Read timed out (或Toxiproxy,延迟或超时为5s)
  3. 在端口上没有监听=> java.net.ConnectException:连接被拒绝
  4. 未配置上游的Toxiproxy(即,端口已打开,但连接没有问题)=> javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake HTTPS上javax.net.ssl.SSLHandshakeException: Remote host terminated the handshakejava.net.SocketTimeoutException: Read timed out HTTP java.net.SocketTimeoutException: Read timed out
  5. 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/hostsHost标头。

翻译自: https://www.javacodegeeks.com/2018/11/java-simulating-connection-problems.html

Java:使用Toxiproxy模拟各种连接问题相关推荐

  1. java模拟连接超时_Java:使用Toxiproxy模拟各种连接问题

    java模拟连接超时 用Toxiproxy和Java的HttpURLConnection模拟各种连接问题,以查看产生了什么样的错误:连接超时vs.读取超时vs.连接被拒绝-. 结果: 系统:openj ...

  2. Java 使用 URLConnection 模拟 Http Get和Post 提交

    2019独角兽企业重金招聘Python工程师标准>>> Java 使用 URLConnection 模拟 Http Get和Post 提交. 1.URLConnectionHelpe ...

  3. Java单元测试之模拟利器-使用PowerMock进行Mock测试

    首页 国产Linux Linux命令 openSUSE ArchLinux Slackware FreeBSD Ubuntu CentOS Fedora Debian PHP教程 在线教程 登录 注册 ...

  4. 使用java网络编程模拟简单网络即时通信

    使用java网络编程模拟简单网络即时通信 通信流程图: 解析: 1.在上图中我们可以看出对于任何一个客户端,都由两部分构成,发送端和接收端(分别由两个线程来维系) 2.客户端在每一次请求链接时都会轮询 ...

  5. Netty 模拟百万连接

      我们知道单机的端口最多65536,除去系统使用的端口, 留给程序使用的也就6万个端口, 在需要对单机做长连接压力测试的时候,如果要测60W的长连接并发,就得找10台机器,而一般情况下我们并没有这么 ...

  6. 深入Java虚拟机——类型装载、连接(转)

    来自http://hi.baidu.com/holder/item/c38abf02de14c7d31ff046e0 Java虚拟机通过装载.连接和初始化一个Java类型,使该类型可以被正在运行的Ja ...

  7. Mockito:一个强大的用于Java开发的模拟测试框架

    介绍 本文将介绍模拟测试框架Mockito的一些基础概念, 介绍该框架的优点,讲解应用Mockito的Java示例. 模拟(Mock)的概念 在软件开发的世界之外, "mock"一 ...

  8. 无忧考吧2017二级java_二级Java模拟软件|无忧考吧二级Java语言程序设计模拟软件下载 v2017.03官方版 - 121下载站...

    无忧考吧二级Java语言程序设计模拟软件是专为准备考试二级JAVA语言的朋友打造的一款在线模拟软件,二级JAVA语言的考试理论上是非常简单的, 大家只需要掌握基本的语法和一些简单的编程就可能了,这款软 ...

  9. c ibatis mysql实例_[Java教程]java程序中的ibatis连接mySql的基本实例

    [Java教程]java程序中的ibatis连接mySql的基本实例 0 2015-03-16 00:01:32 属性文件:SqlMap.properties1 driver=com.mysql.jd ...

最新文章

  1. 前端应该了解的颜色的寓意
  2. 微信小程序code 换取 session_key
  3. python_day2_数据格式
  4. ORCLE 表中列的修改(非常全面哦)
  5. 使用AspectJ和Spring简化了AOP
  6. 第3章 文件IO | 001 文件描述符
  7. Paxos算法是莱斯利·兰伯特(Leslie Lamport)1990年提出的一种基于消息传递的一致性算法。
  8. C/C++编程(尾积相乘)
  9. mongovue mysql_MongoVUE模糊查询,更新单个字段
  10. python 拼音库_改造Python中文拼音扩展库pypinyin补充自定义声母全过程
  11. pointcloud90度分割+球面投影(pcl+ros+python)
  12. openwrt定时任务 2021-10-08
  13. 网页形式的php抓取文件,PHP 抓取网页源文件
  14. 病毒RNA提取:EpiQuik 病毒RNA提取纯化试剂盒方案
  15. JavaScript基础随笔
  16. 齐岳定制|Cyclopropene-PEG-Xylan|环丙烯-聚乙二醇-木聚糖
  17. setTimeout()和setInterval()的区别和转换
  18. 大二芯TS、大三芯TRS及卡侬头音频接口的使用
  19. List<?>和list的区别
  20. 【2017秋季校园招聘笔经面经专题汇总】

热门文章

  1. 纪中B组模拟赛总结(2020.2.3)
  2. 一文理解Netty模型架构
  3. 达到年薪 40W 必需掌握的技术
  4. ByteBuffer的使用
  5. Oracle入门(十四.17)之procedure传递参数
  6. 01)自学JavaScript
  7. 第三章选择结构(一)
  8. Servlet API
  9. 2018蓝桥杯省赛---java---C---3(字母阵列)
  10. win 7 mysql 1067_win7系统登陆MySQL服务出现1067错误的解决方法