Node-red에서 API를 호출 할 때 Retry 처리 (디자인 패턴?)
배경
Node-red로 외부의 API를 호출하는 것이 좋지만, 그 때 상대가 만일 떨어졌을 때에 속공 실패로 하는 것은 싫기 때문에, 만약을 위해 루프시키고 있습니다.
(별로 안 좋았던 적은 없지만)
거기서 사용하고 있는 루프 처리를 노출해 둡니다.
해설
set loop params
루프의 매개 변수를 지정합니다.
delay
는 밀리 세컨드로 지정해, _retryCounter
는 망마입니다. _okStatusCode
는 API 반환값이 msg.StatusCode
에 들어 있다고 가정하고, 그 값이 무엇이라면 Loop 를 Exit 하는지의 값입니다.
something
원하는 API 처리를 돌진하십시오.
loop/timeout
첫 번째 Switch에서 StatusCode를 체크, NG이면 카운터 줄이고, 두 번째 Switch에서 카운터가 남아 있으면 지정 초 수 Wait, 안 된다면 Exit합니다.
그 후의 OK와 ERROR는 단순한 상자이므로 자유롭게 사용하십시오.
소스 코드
[{"id":"2618b143.9cc716","type":"subflow","name":"loop/timeout","info":"入力項目: \n \nmsg._retryCounter \n as number\n ex: 60 (times)\n \nmsg.delay\n as number \n ex: 10000 (msec) \n defalut, 10000(msec) \n \nmsg._okStatusCode \n as number \n ex: 201 \n describe OK case's http statusCode. \n ","category":"","in":[{"x":620,"y":440,"wires":[{"id":"54c8269a.b1e168"}]}],"out":[{"x":880,"y":440,"wires":[{"id":"54c8269a.b1e168","port":0}]},{"x":880,"y":540,"wires":[{"id":"1fc0dbfa.0f2f2c","port":0}]},{"x":820,"y":600,"wires":[{"id":"931d7748.7ebc08","port":1}]}],"outputLabels":["OK","loop","Error"]},{"id":"54c8269a.b1e168","type":"switch","z":"2618b143.9cc716","name":"","property":"statusCode","propertyType":"msg","rules":[{"t":"eq","v":"_okStatusCode","vt":"msg"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":750,"y":440,"wires":[[],["2fffc6ea.8f29c2"]]},{"id":"2fffc6ea.8f29c2","type":"change","z":"2618b143.9cc716","name":"counter -1","rules":[{"t":"set","p":"_retryCounter","pt":"msg","to":"$._retryCounter - 1","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":540,"wires":[["931d7748.7ebc08"]]},{"id":"1fc0dbfa.0f2f2c","type":"delay","z":"2618b143.9cc716","name":"","pauseType":"delayv","timeout":"10","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":740,"y":540,"wires":[[]]},{"id":"931d7748.7ebc08","type":"switch","z":"2618b143.9cc716","name":"","property":"_retryCounter","propertyType":"msg","rules":[{"t":"gt","v":"0","vt":"str"},{"t":"lte","v":"0","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":690,"y":600,"wires":[["1fc0dbfa.0f2f2c"],[]]},{"id":"2acfbeec.b22cf2","type":"change","z":"c94f016c.b5bd3","name":"set loop params","rules":[{"t":"set","p":"_retryCounter","pt":"msg","to":"60","tot":"num"},{"t":"set","p":"delay","pt":"msg","to":"2000","tot":"num"},{"t":"set","p":"_okStatusCode","pt":"msg","to":"201","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":240,"y":700,"wires":[["84a18249.cfe4"]]},{"id":"84a18249.cfe4","type":"function","z":"c94f016c.b5bd3","name":"something","func":"//something\nreturn msg;","outputs":1,"noerr":0,"x":430,"y":700,"wires":[["637a965d.e919d8"]]},{"id":"637a965d.e919d8","type":"subflow:2618b143.9cc716","z":"c94f016c.b5bd3","name":"","x":590,"y":700,"wires":[["43eb1be0.83e32c"],["84a18249.cfe4"],["2815559a.5e347a"]]},{"id":"2815559a.5e347a","type":"function","z":"c94f016c.b5bd3","name":"error","func":"\nreturn msg;","outputs":1,"noerr":0,"x":750,"y":720,"wires":[[]]},{"id":"43eb1be0.83e32c","type":"function","z":"c94f016c.b5bd3","name":"OK","func":"\nreturn msg;","outputs":1,"noerr":0,"x":750,"y":680,"wires":[[]]}]
기타
Exit는 Loop가 횟수 넘으면만 하고 있습니다만, StatusCode가 특정의 내용이면 곧바로 Error 처리한다고 하는 것을 넣어도 좋다고 생각합니다.
이상
뭔가 있으면 돌진해 주시면 기쁩니다.
감사합니다.
Reference
이 문제에 관하여(Node-red에서 API를 호출 할 때 Retry 처리 (디자인 패턴?)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kouichirou/items/9d62029b826145184664
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
set loop params
루프의 매개 변수를 지정합니다.
delay
는 밀리 세컨드로 지정해, _retryCounter
는 망마입니다. _okStatusCode
는 API 반환값이 msg.StatusCode
에 들어 있다고 가정하고, 그 값이 무엇이라면 Loop 를 Exit 하는지의 값입니다.something
원하는 API 처리를 돌진하십시오.
loop/timeout
첫 번째 Switch에서 StatusCode를 체크, NG이면 카운터 줄이고, 두 번째 Switch에서 카운터가 남아 있으면 지정 초 수 Wait, 안 된다면 Exit합니다.
그 후의 OK와 ERROR는 단순한 상자이므로 자유롭게 사용하십시오.
소스 코드
[{"id":"2618b143.9cc716","type":"subflow","name":"loop/timeout","info":"入力項目: \n \nmsg._retryCounter \n as number\n ex: 60 (times)\n \nmsg.delay\n as number \n ex: 10000 (msec) \n defalut, 10000(msec) \n \nmsg._okStatusCode \n as number \n ex: 201 \n describe OK case's http statusCode. \n ","category":"","in":[{"x":620,"y":440,"wires":[{"id":"54c8269a.b1e168"}]}],"out":[{"x":880,"y":440,"wires":[{"id":"54c8269a.b1e168","port":0}]},{"x":880,"y":540,"wires":[{"id":"1fc0dbfa.0f2f2c","port":0}]},{"x":820,"y":600,"wires":[{"id":"931d7748.7ebc08","port":1}]}],"outputLabels":["OK","loop","Error"]},{"id":"54c8269a.b1e168","type":"switch","z":"2618b143.9cc716","name":"","property":"statusCode","propertyType":"msg","rules":[{"t":"eq","v":"_okStatusCode","vt":"msg"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":750,"y":440,"wires":[[],["2fffc6ea.8f29c2"]]},{"id":"2fffc6ea.8f29c2","type":"change","z":"2618b143.9cc716","name":"counter -1","rules":[{"t":"set","p":"_retryCounter","pt":"msg","to":"$._retryCounter - 1","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":540,"wires":[["931d7748.7ebc08"]]},{"id":"1fc0dbfa.0f2f2c","type":"delay","z":"2618b143.9cc716","name":"","pauseType":"delayv","timeout":"10","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":740,"y":540,"wires":[[]]},{"id":"931d7748.7ebc08","type":"switch","z":"2618b143.9cc716","name":"","property":"_retryCounter","propertyType":"msg","rules":[{"t":"gt","v":"0","vt":"str"},{"t":"lte","v":"0","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":690,"y":600,"wires":[["1fc0dbfa.0f2f2c"],[]]},{"id":"2acfbeec.b22cf2","type":"change","z":"c94f016c.b5bd3","name":"set loop params","rules":[{"t":"set","p":"_retryCounter","pt":"msg","to":"60","tot":"num"},{"t":"set","p":"delay","pt":"msg","to":"2000","tot":"num"},{"t":"set","p":"_okStatusCode","pt":"msg","to":"201","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":240,"y":700,"wires":[["84a18249.cfe4"]]},{"id":"84a18249.cfe4","type":"function","z":"c94f016c.b5bd3","name":"something","func":"//something\nreturn msg;","outputs":1,"noerr":0,"x":430,"y":700,"wires":[["637a965d.e919d8"]]},{"id":"637a965d.e919d8","type":"subflow:2618b143.9cc716","z":"c94f016c.b5bd3","name":"","x":590,"y":700,"wires":[["43eb1be0.83e32c"],["84a18249.cfe4"],["2815559a.5e347a"]]},{"id":"2815559a.5e347a","type":"function","z":"c94f016c.b5bd3","name":"error","func":"\nreturn msg;","outputs":1,"noerr":0,"x":750,"y":720,"wires":[[]]},{"id":"43eb1be0.83e32c","type":"function","z":"c94f016c.b5bd3","name":"OK","func":"\nreturn msg;","outputs":1,"noerr":0,"x":750,"y":680,"wires":[[]]}]
기타
Exit는 Loop가 횟수 넘으면만 하고 있습니다만, StatusCode가 특정의 내용이면 곧바로 Error 처리한다고 하는 것을 넣어도 좋다고 생각합니다.
이상
뭔가 있으면 돌진해 주시면 기쁩니다.
감사합니다.
Reference
이 문제에 관하여(Node-red에서 API를 호출 할 때 Retry 처리 (디자인 패턴?)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kouichirou/items/9d62029b826145184664
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
[{"id":"2618b143.9cc716","type":"subflow","name":"loop/timeout","info":"入力項目: \n \nmsg._retryCounter \n as number\n ex: 60 (times)\n \nmsg.delay\n as number \n ex: 10000 (msec) \n defalut, 10000(msec) \n \nmsg._okStatusCode \n as number \n ex: 201 \n describe OK case's http statusCode. \n ","category":"","in":[{"x":620,"y":440,"wires":[{"id":"54c8269a.b1e168"}]}],"out":[{"x":880,"y":440,"wires":[{"id":"54c8269a.b1e168","port":0}]},{"x":880,"y":540,"wires":[{"id":"1fc0dbfa.0f2f2c","port":0}]},{"x":820,"y":600,"wires":[{"id":"931d7748.7ebc08","port":1}]}],"outputLabels":["OK","loop","Error"]},{"id":"54c8269a.b1e168","type":"switch","z":"2618b143.9cc716","name":"","property":"statusCode","propertyType":"msg","rules":[{"t":"eq","v":"_okStatusCode","vt":"msg"},{"t":"else"}],"checkall":"true","repair":false,"outputs":2,"x":750,"y":440,"wires":[[],["2fffc6ea.8f29c2"]]},{"id":"2fffc6ea.8f29c2","type":"change","z":"2618b143.9cc716","name":"counter -1","rules":[{"t":"set","p":"_retryCounter","pt":"msg","to":"$._retryCounter - 1","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":470,"y":540,"wires":[["931d7748.7ebc08"]]},{"id":"1fc0dbfa.0f2f2c","type":"delay","z":"2618b143.9cc716","name":"","pauseType":"delayv","timeout":"10","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":740,"y":540,"wires":[[]]},{"id":"931d7748.7ebc08","type":"switch","z":"2618b143.9cc716","name":"","property":"_retryCounter","propertyType":"msg","rules":[{"t":"gt","v":"0","vt":"str"},{"t":"lte","v":"0","vt":"str"}],"checkall":"false","repair":false,"outputs":2,"x":690,"y":600,"wires":[["1fc0dbfa.0f2f2c"],[]]},{"id":"2acfbeec.b22cf2","type":"change","z":"c94f016c.b5bd3","name":"set loop params","rules":[{"t":"set","p":"_retryCounter","pt":"msg","to":"60","tot":"num"},{"t":"set","p":"delay","pt":"msg","to":"2000","tot":"num"},{"t":"set","p":"_okStatusCode","pt":"msg","to":"201","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":240,"y":700,"wires":[["84a18249.cfe4"]]},{"id":"84a18249.cfe4","type":"function","z":"c94f016c.b5bd3","name":"something","func":"//something\nreturn msg;","outputs":1,"noerr":0,"x":430,"y":700,"wires":[["637a965d.e919d8"]]},{"id":"637a965d.e919d8","type":"subflow:2618b143.9cc716","z":"c94f016c.b5bd3","name":"","x":590,"y":700,"wires":[["43eb1be0.83e32c"],["84a18249.cfe4"],["2815559a.5e347a"]]},{"id":"2815559a.5e347a","type":"function","z":"c94f016c.b5bd3","name":"error","func":"\nreturn msg;","outputs":1,"noerr":0,"x":750,"y":720,"wires":[[]]},{"id":"43eb1be0.83e32c","type":"function","z":"c94f016c.b5bd3","name":"OK","func":"\nreturn msg;","outputs":1,"noerr":0,"x":750,"y":680,"wires":[[]]}]
Exit는 Loop가 횟수 넘으면만 하고 있습니다만, StatusCode가 특정의 내용이면 곧바로 Error 처리한다고 하는 것을 넣어도 좋다고 생각합니다.
이상
뭔가 있으면 돌진해 주시면 기쁩니다.
감사합니다.
Reference
이 문제에 관하여(Node-red에서 API를 호출 할 때 Retry 처리 (디자인 패턴?)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kouichirou/items/9d62029b826145184664
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Node-red에서 API를 호출 할 때 Retry 처리 (디자인 패턴?)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kouichirou/items/9d62029b826145184664텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)