ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Spring Cloud Fegin 和 Eurake 简单使用

2021-04-13 19:59:09  阅读:172  来源: 互联网

标签:Fegin Spring class list springframework eureka org public Cloud


Spring Cloud Fegin 和 Eurake 简单使用

Eurake注册中心

gradle中的依赖

dependencies {
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-server'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

启动类

@SpringBootApplication
@EnableEurekaServer//配置服务注册中心
//@EnableDiscoveryClient//开启客户端注册
public class SpringCloudEurekaStudyApplication {

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

}

相关的配置

#续约任务调用间隔时间
eureka.instance.lease-renewal-interval-in-seconds=30
#失效时间
eureka.instance.lease-expiration-duration-in-seconds=90
#单机开发情况下容易触发保护机制导致,维护的注册列表不是实时准备
#默认开着,生产环境开着(产生原因一般是网络原因),会将当前的实例保存下来
#让其尽可能不过期,但是容易使消费端拿到不正确的注册列表,所以客户端一般要
#有容错的机制:断路器或者请求重试之类的
eureka.server.enable-self-preservation=false
#注册的实例名 默认:IdUtils.getDefaultInstanceId
eureka.instance.instance-id=${spring.application.name}:${server.port}
#region 分组 设置分组优先在分组内进行服务调用,可以根据地域网络之类的进行分组
eureka.client.region=guangzhou
#zone 分组
eureka.client.availability-zones.guangzhou=study

#注册中心
server.port=9000
eureka.instance.hostname=localhost
#是否向注册中心注册,如果是没有集群的话,没有必要
eureka.client.register-with-eureka=false
#是否检索注册的服务列表,如果是没有集群的话,没有必要
eureka.client.fetch-registry=false
#注册中心的地址,如果是没有集群的话,没有必要,如果有集群写其他的注册中心的地址,相应的eureka.client.register-with-eureka,eureka.client.fetch-registry 需要配置成true
eureka.client.service-url.defaultZone=http://ip:port/eureka/

Fegin provide service

其实就相当于一个 Web 应用整合 Eurake
gradle中的依赖

dependencies {
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }
}

配置

  port: 9001
spring:
  application:
    name: user-feign-service
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://localhost:9000/eureka/
/**
 * @Auther:
 * @Date: 2021/4/13
 * @Description: UserController 可以作为服务提供者给别的服务调用
 * @Version 1.0.0
 */
@RestController
@RequestMapping("/user")
public class UserController {
    @PostMapping("/info")
    public String userInfo(){
        return "userinfo";
    }
    @GetMapping("/list")
    public List<String> userList(){
        List<String> list = new ArrayList<>();
        list.add("YY");
        list.add("ZZ");
        return list;
    }
}

@SpringBootApplication
@EnableDiscoveryClient//表名开启Eureka客户端
public class SpringCloudFeignServiceApplication {

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

}

Fegin consumer

ribbon 通过 RestTemplate 负载均衡的请求 其他service提供的服务ribbon
通过Feign 负载均衡和 hystrix(Feign内置)进行默认的的断路处理

import com.study.springcloudfeignapi.user.feign.fallback.UserFeignServiceFallBack;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @Auther: ASUS
 * @Date: 2021/4/13
 * @Description: UserFeignService
 * @Version 1.0.0
 */
//path 是请求路径
//contextId 是别名
//value 代表服务的引用,如果有相同的定义的value 可以用contextId 进行区分,否则启动会报错
//这里直接定义service 调用的接口,feign 会将其和远程的服务关联起来(通过http的方式)
@FeignClient(value = "user-feign-service",path = "/user",contextId = "user",fallback = UserFeignServiceFallBack.class)
@Component
public interface UserFeignService {
    @PostMapping("/info")
    String userInfo();
}


/**
 * @Auther: ASUS
 * @Date: 2021/4/13
 * @Description: UserExtraFeignService
 * @Version 1.0.0
 */
@FeignClient(value = "user-feign-service",path = "/user",contextId = "userextra",fallback = UserExtraFeginServiceFallBack.class )
@Component
public interface UserExtraFeignService {
    @GetMapping("/list")
    List<String> userList();
}

服务降级处理实现之前定义的接口,对每个方法做降级的处理操作

/**
 * @Auther: ASUS
 * @Date: 2021/4/13
 * @Description: UserExtraFeginServiceFallBack 服务降级处理,当服务提供方无法提供服务的时候可以进行默认的返回处理
 * @Version 1.0.0
 */
@Service
public class UserExtraFeginServiceFallBack implements UserExtraFeignService {
    @Override
    public List<String> userList() {
        List<String> list = new ArrayList<>();
        list.add("UserExtraFeginServiceFallBack userList error");
        return list;
    }
}

/**
 * @Auther: ASUS
 * @Date: 2021/4/13
 * @Description: UserFeignServiceFallBack 服务降级类,当服务提供方无法提供服务的时候可以进行默认的返回处理
 * @Version 1.0.0
 */
@Service
public class UserFeignServiceFallBack implements UserFeignService {
    @Override
    public String userInfo() {
        return "UserFeignServiceFallBack info";
    }
}

feign http 发送请求时进行拦截处理,对请求信息进行封装RequestInterceptor 时Feign 提供的接口

import feign.RequestInterceptor;
import feign.RequestTemplate;
import org.springframework.stereotype.Component;
/**
 * @Auther: ASUS
 * @Date: 2021/4/13
 * @Description: FeignRequestInterceptor 在发生Fegin http请求的时候 进行拦截设置一些参数
 * @Version 1.0.0
 */
@Component
public class FeignRequestInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate template) {
        System.out.println("请求url:"+template.url()+"befor.....");
        template.header("toker","111");
    }
}

标签:Fegin,Spring,class,list,springframework,eureka,org,public,Cloud
来源: https://blog.csdn.net/weixin_36927395/article/details/115655056

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有