当前位置:首页 > 服务端 > Feign + Hystrix 服务熔断和服务降级

Feign + Hystrix 服务熔断和服务降级

2022年11月06日 17:10:35服务端10

 

本机IP为  192.168.1.102

 

1.    新建 Maven 项目   feign

 

2.   pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
        http://maven.apache.org/xsd/maven-4.0.0.xsd">


    <modelVersion>4.0.0</modelVersion>
    <groupId>com.java</groupId>
    <artifactId>feign</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <name>${project.artifactId}</name>

    <!-- 配置版本常量 -->
    <properties>
        <jdk.version>1.8</jdk.version>
        <spring.cloud.version>2.0.0.RELEASE</spring.cloud.version>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.5.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>${spring.cloud.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>${spring.cloud.version}</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.49</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>


        <!-- 热部署 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>springloaded</artifactId>
            <version>1.2.8.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

    </dependencies>

    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>${jdk.version}</source>
                    <target>${jdk.version}</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

 

 

3.   application.yml

server:
  port: 80
  

feign: 
  hystrix: 
    enabled: true



eureka:
  client:
    register-with-eureka: false
    service-url: 
      defaultZone: http://192.168.1.102:8080/eureka/  
      #defaultZone: http://s0.com:8080/eureka/,http://s1.com:8080/eureka/,http://s2.com:8080/eureka/

 

 

4.   HostService.java

package com.java.feign.service;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

import com.alibaba.fastjson.JSONObject;

@FeignClient(value = "MICROSERVICE", fallbackFactory = HostServiceFallbackFactory.class)
public interface HostService {

    @GetMapping("/getHostMessage/{id}")
    public JSONObject getHostMessage(@PathVariable(value = "id") String id);

}

 

 

5.   HostServiceFallbackFactory.java

package com.java.feign.service;

import org.springframework.stereotype.Component;

import com.alibaba.fastjson.JSONObject;

import feign.hystrix.FallbackFactory;

@Component
public class HostServiceFallbackFactory implements FallbackFactory<HostService> {

    @Override
    public HostService create(Throwable cause) {
        return new HostService() {

            @Override
            public JSONObject getHostMessage(String id) {
                JSONObject json = new JSONObject();
                json.put("id", id);
                json.put("description", "服务异常演习专用!");
                json.put("msg", cause.getMessage());
                return json;
            }
        };
    }

}

 

6.   HostController.java

package com.java.feign.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import com.alibaba.fastjson.JSONObject;
import com.java.feign.service.HostService;

@RestController
public class HostController {

    @Autowired
    private HostService hostService;

    @GetMapping("/getHostMessage/{id}")
    public JSONObject getHostMessage(@PathVariable String id) {
        return hostService.getHostMessage(id);
    }

}

 

 

7.   FeignStarter.java

package com.java.feign;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.ComponentScan;

@EnableEurekaClient
@SpringBootApplication
@EnableFeignClients(basePackages = { "com.java.feign.service" })
@ComponentScan(basePackages = { "com.java.feign" })
public class FeignStarter extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(FeignStarter.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(FeignStarter.class);
    }

}

 

 

8.   运行测试

启动  Eureka   服务注册中心,参考  https://www.cnblogs.com/jonban/p/eureka.html

启动  MicroService  微服务, 参考   https://www.cnblogs.com/jonban/p/microservice.html

启动  Feign服务,运行 FeignStarter.java

 

浏览器输入URL

http://192.168.1.102/getHostMessage/hello

http://127.0.0.1/getHostMessage/hello

 

返回数据如下:

{"hostname":"F6RK2EXYAFARPPS","hostAddress":"192.168.1.102","id":"hello"}

 

截图如下:

Feign + Hystrix 服务熔断和服务降级 _ JavaClub全栈架构师技术笔记

 

搭建成功,程序正常运行。

 

下面开始测试异常

关掉微服务提供者 microservice 服务器

 

浏览器输入URL

http://192.168.1.102/getHostMessage/hello

http://127.0.0.1/getHostMessage/hello

 

 

返回数据如下:

{"msg":"com.netflix.client.ClientException: Load balancer does not have available server for client: MICROSERVICE","description":"服务异常演习专用!","id":"hello"}

截图如下:

Feign + Hystrix 服务熔断和服务降级 _ JavaClub全栈架构师技术笔记

 

服务异常生效,符合预期结果。

 

.

作者:诚信天下
来源链接:https://www.cnblogs.com/jonban/p/feign.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68150.html

标签: Feign
分享给朋友:

“Feign + Hystrix 服务熔断和服务降级” 的相关文章

Feign服务之间的鉴权问题

Feign服务调服务传递数据的时候,需要带token验证的,而调用那个用户服务的时候被用户服务方拦截然后没有token进不去接口,很明显的是因为没有token导致,那么Feign里面有提供一个接口叫做RequestInterceptor,只要实...

【SpringBoot】通过Feign调用传递Header中参数

如何通过Feign传递Header参数   问题描述 我们在SpringCloud中使用Feign请求另一个服务的Api接口时,有将Header中参数传递下去的需求,如果不做特殊处理,就会将Header中的参数丢失。   解决方案...

feign 启用gzip压缩

feign 启用gzip压缩

目录 1.项目中启用gzip压缩 2.在feign 服务提供方开启http压缩(很重要) 3.启用httpclient 4.还有一点很容易忽略的,引入httpclient jar包,同时注意和openfeign的版本一致。 一.最近项目要在f...

声明式服务消费Feign——4(使用Feign实现消费者服务熔断)

声明式服务消费Feign——4(使用Feign实现消费者服务熔断)

使用Feign实现消费者服务熔断 服务熔断 1.在yml文件开启 hystrix功能 2.指定熔断回调逻辑 3.测试...

Spring Cloud Alibaba Sentinel 整合 Feign 的设计实现

Spring Cloud Alibaba Sentinel 整合 Feign 的设计实现

作者 | Spring Cloud Alibaba 高级开发工程师洛夜 来自公众号阿里巴巴中间件投稿 前段时间 Hystrix 宣布不再维护之后(Hystrix 停止开发。。。Spring Cloud 何去何从?),Feign 作为一个跟 Hystrix 强依赖...

Feign的使用(与Ribbon的异同)

Feign:伪RPC客户端(本质还是http) 选择Feign:   1.Feignn和Ribbo两个的区别和选择   默认集成了Ribbon(包含关系)   写起来更加思路清晰和方便   采用注解方式进行配置,配置熔断等方式方便 &nbs...

聊聊如何根据环境动态指定feign调用服务名

前言 前段时间和朋友聊天,他说他部门老大给他提了一个需求,这个需求的背景是这样,他们开发环境和测试环境共用一套eureka,服务提供方的serviceId加环境后缀作为区分,比如用户服务其开发环境serviceId为user_dev,测试环境为user_test。每次服务提供方发...

Feign 调用接口报错:no suitable HttpMessageConverter found for response type [xx]... 解决!

由于我的接口返回的字符串,客户端采用feign调用接口一直报错: no suitable HttpMessageConverter found for response type [xx]... 网上查了很多原因,都是说Feign的MideaType不支持类型云云.....

feign传递数组

在实际项目开发过程中,我们使用 Feign 实现服务与服务之间的调用 是在很多情 况下,多参数传递是无法避免的 下面我们分两种情况,讨论如何在 GET POST 情况下 ,在Web开发中 SpringMVC支持GET法直接绑定POJO,但是Feign...

feign公共接口 RequestMapping 与Controller冲突

import feign.Feign; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigur...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。