Смоделируйте различные проблемы с подключением с помощью Toxiproxy и Java HttpURLConnection
чтобы увидеть, какие ошибки возникают: превышено время HttpURLConnection
подключения, превышено время чтения или отказано в соединении….
Полученные результаты:
Система: openjdk 11.0.1 2018-10-16
-
(.setConnectTimeout 1)
=> java.net.SocketTimeoutException: истекло время соединения -
(.setReadTimeout 1)
=>javax.net.ssl.SSLProtocolException: Read timed out
по HTTPS,java.net.SocketTimeoutException: Read timed out
по HTTP (или Toxiproxy с задержкой 5 с или тайм-аутом) - Ничего не слушает в порту => java.net.ConnectException: соединение отказано
- Toxiproxy без настроенного восходящего потока (т. Е. Порт открыт, но ничто не радует соединением) =>
javax.net.ssl.SSLHandshakeException: Remote host terminated the handshake
по HTTPS,java.net.SocketTimeoutException: Read timed out
по HTTP - limit_data_downstream => java.io.IOException: преждевременный EOF
(То, что я не смог смоделировать (пока), это «соединение прервано / разорвано».)
Настройка
Prerequisities
В /etc/hosts
добавьте:
1
|
127.0.0.1 proxied.google.com |
Настройка токсипрокси
Запустить токсипрокси:
1
2
3
|
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 |
Настройте его (мы могли бы просто POST :8474
но использовать CLI проще):
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
|
$ 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' |
Тестовый код
1
2
3
4
5
6
7
8
9
|
( import '[java.net URL HttpURLConnection]) (-> ;; 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
.
Опубликовано на Java Code Geeks с разрешения Якуба Холи, партнера нашей программы JCG . См. Оригинальную статью здесь: Java: моделирование различных проблем с соединением с Toxiproxy
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |