Смоделируйте различные проблемы с подключением с помощью 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 #3docker 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 #2Added downstream latency toxic 'latency_downstream' on proxy 'google# ./toxiproxy-cli toxic remove google -n latency_downstreamRemoved toxic 'latency_downstream' on proxy 'google'# ./toxiproxy-cli toxic add google -t timeout -a timeout=2000 # case #2Added downstream timeout toxic 'timeout_downstream' on proxy 'google'# ./toxiproxy-cli toxic remove google -n timeout_downstreamRemoved toxic 'timeout_downstream' on proxy 'google'# ./toxiproxy-cli toxic add google -t limit_data -a bytes=5000 # case #5Added 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, являются их собственными. |