{"id":2139,"date":"2023-04-02T10:59:35","date_gmt":"2023-04-02T02:59:35","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=2139"},"modified":"2023-04-05T19:59:30","modified_gmt":"2023-04-05T11:59:30","slug":"feign-integrates-sentinel-to-achieve-circuit-breaker-degradation-processing","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/04\/02\/feign-integrates-sentinel-to-achieve-circuit-breaker-degradation-processing\/","title":{"rendered":"Feign\u6574\u5408Sentinel\u5b9e\u73b0\u7194\u65ad\u964d\u7ea7\u5904\u7406"},"content":{"rendered":"<blockquote>\n<p>Sentinel\u53ef\u4ee5\u6574\u5408Feign\u8fdb\u884c\u7194\u65ad\u5904\u7406\u3002\u7279\u522b\u662fHystrix\u5ba3\u5e03\u4e0d\u518d\u7ef4\u62a4\u540e\uff0c\u53ef\u4ee5\u8f7b\u677e\u7684\u5207\u6362\u6210\u8fd9\u79cd\u65b9\u6848\u3002\u6574\u5408\u8fc7\u7a0b\u4e0eHystrix\u7c7b\u4f3c<\/p>\n<\/blockquote>\n<h3>\u52a0\u5165alibaba-Sentinel\u4f9d\u8d56<\/h3>\n<pre><code class=\"language-xml\">&lt;dependency&gt;\n  &lt;groupId&gt;com.alibaba.cloud&lt;\/groupId&gt;\n  &lt;artifactId&gt;spring-cloud-starter-alibaba-sentinel&lt;\/artifactId&gt;\n&lt;\/dependency&gt;<\/code><\/pre>\n<p><!-- more --><\/p>\n<h3>yml\u6587\u4ef6\u914d\u7f6e\u542f\u7528 Feign \u6574\u5408 Sentinel \u7684\u81ea\u52a8\u914d\u7f6e<\/h3>\n<pre><code class=\"language-yml\"># \u5f00\u542ffeign\u5bf9sentinel\u7684\u652f\u6301\nfeign:\n  sentinel:\n    enabled: true<\/code><\/pre>\n<h3>Feign\u63a5\u53e3<\/h3>\n<pre><code class=\"language-java\">@FeignClient(value=&quot;user&quot;, configuration = FeignExceptionConfig.class, fallbackFactory = UserFeignClientFallbackFactory.class, decode404 = true)\npublic interface UserFeignClient {\n\n    \/**\n     * feign rpc\u8bbf\u95ee\u8fdc\u7a0b\/users\/login\u63a5\u53e3\n     * @param username\n     * @return\n     *\/\n    @GetMapping(value = &quot;\/users\/login&quot;, params = &quot;username&quot;)\n    LoginAppUser findByUsername(@RequestParam(&quot;username&quot;) String username);\n\n    @GetMapping(value = &quot;\/users\/mobile&quot;, params = &quot;mobile&quot;)\n    LoginAppUser findByMobile(@RequestParam(&quot;mobile&quot;) String mobile);\n\n    @GetMapping(value = &quot;\/users&quot;, params = &quot;params&quot;)\n    PageResult&lt;SysUser&gt; findUsers(@RequestParam Map&lt;String, Object&gt; params);\n}<\/code><\/pre>\n<h3>\u964d\u7ea7\u5904\u7406\u7c7b<\/h3>\n<p>\u4f7f\u7528FallbackFactory\u7684\u65b9\u5f0f<\/p>\n<pre><code class=\"language-java\">import feign.hystrix.FallbackFactory;\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\nimport org.springframework.stereotype.Component;\n\nimport java.util.Map;\n\n@Component\npublic class UserFeignClientFallbackFactory implements FallbackFactory&lt;UserFeignClient&gt; {\n\n    private static final Logger log = LoggerFactory.getLogger(UserFeignClientFallbackFactory.class);\n\n    @Override\n    public UserFeignClient create(Throwable throwable) {\n        return new UserFeignClient() {\n\n            @Override\n            public LoginAppUser findByUsername(String username) {\n                log.error(&quot;\u901a\u8fc7\u7528\u6237\u540d\u67e5\u8be2\u7528\u6237\u5f02\u5e38:{}&quot;, username, throwable);\n                return new LoginAppUser() ;\n            }\n\n            @Override\n            public LoginAppUser findByMobile(String mobile) {\n                log.error(&quot;\u901a\u8fc7\u624b\u673a\u53f7\u67e5\u8be2\u7528\u6237\u5f02\u5e38:{}&quot;, mobile, throwable);\n                return new LoginAppUser();\n            }\n\n            @Override\n            public PageResult&lt;SysUser&gt; findUsers(Map&lt;String, Object&gt; params) {\n                log.error(&quot;\u67e5\u8be2\u7528\u6237\u5217\u8868\u5f02\u5e38:{}&quot;);\n                return null;\n            }\n\n        };\n    }\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Sentinel\u53ef\u4ee5\u6574\u5408Feign\u8fdb\u884c\u7194\u65ad\u5904\u7406\u3002\u7279\u522b\u662fHystrix\u5ba3\u5e03\u4e0d\u518d\u7ef4\u62a4\u540e\uff0c\u53ef\u4ee5\u8f7b\u677e\u7684\u5207\u6362\u6210\u8fd9\u79cd\u65b9\u6848\u3002 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[42],"tags":[251,539],"class_list":["post-2139","post","type-post","status-publish","format-standard","hentry","category-spring-cloud","tag-feign","tag-sentinel"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/2139","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=2139"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/2139\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=2139"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=2139"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=2139"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}