微服務的斷路器——hystrix

ext {

springBootVersion = '2.0.4.RELEASE'

}

repositories {

mavenCentral()

}

dependencies {

classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")

}

}

apply plugin: 'java'

apply plugin: 'eclipse'

apply plugin: 'org.springframework.boot'

apply plugin: 'io.spring.dependency-management'

group = 'com.example'

version = '0.0.1-SNAPSHOT'

sourceCompatibility = 1.8

repositories {

mavenCentral()

}

ext {

springCloudVersion = 'Finchley.SR1'

}

dependencies {

compile('org.springframework.boot:spring-boot-starter-web')

compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')

compile('org.springframework.cloud:spring-cloud-starter-openfeign')

testCompile('org.springframework.boot:spring-boot-starter-test')

}

dependencyManagement {

imports {

mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"

}

}

application.yml文件

server:

port: 8796

spring:

application:

name: service-feign-hystrix

eureka:

client:

service-url:

defaultZone: http://localhost:8791/eureka/

feign:

hystrix:

enabled: true #feign自帶斷路器,但需要打開

主方法:

package com.example.servicefeignhystrix;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

import org.springframework.cloud.openfeign.EnableFeignClients;

@EnableEurekaClient

@EnableFeignClients

@SpringBootApplication

public class ServiceFeignHystrixApplication {

public static void main(String[] args) {

SpringApplication.run(ServiceFeignHystrixApplication.class, args);

}

}

接口SayHiService.java文件

package com.example.servicefeignhystrix;

import org.springframework.cloud.openfeign.FeignClient;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

@FeignClient(value = "eureka-client-say-hi",fallback = SayHiServiceWithHystrix.class)

public interface SayHiService {

@RequestMapping(value = "/hi", method = RequestMethod.GET)

String sayHiFromClient();

}

SayHiServiceWithHystrix.java文件

package com.example.servicefeignhystrix;

import org.springframework.stereotype.Component;

@Component

public class SayHiServiceWithHystrix implements SayHiService {

@Override

public String sayHiFromClient() {

return "sorry,I am wrong";

}

}

HelloController.java文件

package com.example.servicefeignhystrix;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

@RestController

public class HelloController {

@Autowired

SayHiService sayHiService;

@RequestMapping("/hi")

public String sayHi(){

return sayHiService.sayHiFromClient();

}

}

此時啟動eureka-server,以及eureka-client-say-hi項目的兩個實例,以及剛才新建的項目service-feign-hystrix.

訪問http://localhost:8796/hi

出現以下兩種場景:

微服務的斷路器——hystrix

微服務的斷路器——hystrix

如果關掉8792端口的服務,則會返回hi,I am port 8793

如果關掉eureka-client-say-hi服務的8792和8793兩個端口實例,則會返回

微服務的斷路器——hystrix

此時標明,feign的斷路器已經生效了。


分享到:


相關文章: