简介

上一节我们讨论了怎么用feign声明式调用cloud的生产者,这节我们讨论一下feign配置,通过编写配置类,我们可以自定义feign的日志级别,日志扫描目录,可以通过feign调用服务在eureka上的调用信息。Spring Cloud大型企业分布式微服务云构建的B2B2C电子商务平台源码请加企鹅求求:一零三八七七四六二六

feign声明接口之后,在代码中通过@Resource或者@Autowired注入之后即可使用。

@FeignClient标签的常用属性如下:

  • name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现
  • url: url一般用于调试,可以手动指定@FeignClient调用的地址
  • decode404:当发生http 404错误时,如果该字段位true,会调用decoder进行解码,否则抛出FeignException
  • configuration: Feign配置类,可以自定义Feign的Encoder、Decoder、LogLevel、Contract
  • fallback: 定义容错的处理类,当调用远程接口失败或超时时,会调用对应接口的容错逻辑,fallback指定的类必须实现@FeignClient标记的接口
  • fallbackFactory: 工厂类,用于生成fallback类示例,通过这个属性我们可以实现每个接口通用的容错逻辑,减少重复的代码
  • path: 定义当前FeignClient的统一前缀

一、创建模块(microservice-consumer-movie-feign-customizing)

项目结构如下:

二、pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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"><parent><artifactId>microservice-spring-cloud</artifactId><groupId>com.jacky</groupId><version>1.0-SNAPSHOT</version></parent><modelVersion>4.0.0</modelVersion><artifactId>microservice-consumer-movie-feign-customizing</artifactId><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-feign</artifactId></dependency></dependencies><build><plugins><plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><executions><!--设置在执行maven 的install时构建镜像--><execution><id>build-image</id><phase>install</phase><goals><goal>build</goal></goals></execution></executions><configuration><!--安装了docker的主机,并且打开了api remote接口设置--><dockerHost>http://192.168.6.130:5678</dockerHost><pushImage>true</pushImage><!--设置上传镜像到私有仓库,需要docker设置指定私有仓库地址--><!--镜像名称--><imageName>${docker.repostory}/${docker.image.prefix}/${project.artifactId}:${project.version}</imageName><!--镜像的基础版本--><baseImage>java:openjdk-8-jdk-alpine</baseImage><!--镜像启动参数--><entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint><resources><resource><targetPath>/</targetPath><directory>${project.build.directory}</directory><include>${project.build.finalName}.jar</include></resource></resources></configuration></plugin></plugins></build>
</project>复制代码

三、配置文件

spring:application:name: microservice-consumer-movie-feign-customizing
server:port: 7901
eureka:client:healthcheck:enabled: trueserviceUrl:defaultZone: http://jacky:admin@peer1:8761/eureka/,http://jacky:admin@peer2:8762/eureka/,http://jacky:admin@peer3:8763/eureka/instance:prefer-ip-address: true
#feign日志配置
logging:level:com.jacky.cloud.feign.UserFeignClient: DEBUG# 解决第一次请求报超时异常的方案:
# hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds: 5000  #延长超时时间
# 或者:
# hystrix.command.default.execution.timeout.enabled: false
# 或者:
feign.hystrix.enabled: false                       # 索性禁用feign的hystrix支持# 超时的issue:https://github.com/spring-cloud/spring-cloud-netflix/issues/768
# 超时的解决方案: http://stackoverflow.com/questions/27375557/hystrix-command-fails-with-timed-out-and-no-fallback-available
# hystrix配置: https://github.com/Netflix/Hystrix/wiki/Configuration#execution.isolation.thread.timeoutInMilliseconds复制代码

四、实体类User.java

package com.jacky.cloud.entity;import java.math.BigDecimal;public class User {private Long id;private String username;private String name;private Short age;private BigDecimal balance;public Long getId() {return this.id;}public void setId(Long id) {this.id = id;}public String getUsername() {return this.username;}public void setUsername(String username) {this.username = username;}public String getName() {return this.name;}public void setName(String name) {this.name = name;}public Short getAge() {return this.age;}public void setAge(Short age) {this.age = age;}public BigDecimal getBalance() {return this.balance;}public void setBalance(BigDecimal balance) {this.balance = balance;}}复制代码

五、feign客户端1(UserFeignClient1.java)

package com.jacky.cloud.feign;import org.springframework.cloud.netflix.feign.FeignClient;import com.jacky.cloud.entity.User;
import com.jacky.config.Configuration1;import feign.Param;
import feign.RequestLine;@FeignClient(name = "microservice-provider-user", configuration = Configuration1.class)
public interface UserFeignClient1 {@RequestLine("GET /simple/{id}")public User findById(@Param("id") Long id);
}复制代码

六、feign客户端2(UserFeignClient2.java)

package com.jacky.cloud.feign;import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;import com.jacky.config.Configuration2;@FeignClient(name = "xxxx", url = "http://localhost:8761/", configuration = Configuration2.class)
public interface UserFeignClient2 {@RequestMapping(value = "/eureka/apps/{serviceName}")public String findServiceInfoFromEurekaByServiceName(@PathVariable("serviceName") String serviceName);
}复制代码

七、feign配置类1(Configuration1.java)

package com.jacky.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import feign.Contract;
import feign.Logger;@Configuration
public class Configuration1 {@Beanpublic Contract feignContract() {return new feign.Contract.Default();}@BeanLogger.Level feignLoggerLevel() {return Logger.Level.FULL;  //定义feign日志显示级别}
}复制代码

八、feign配置类2(Configuration2.java)

package com.jacky.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import feign.auth.BasicAuthRequestInterceptor;@Configuration
public class Configuration2 {@Beanpublic BasicAuthRequestInterceptor basicAuthRequestInterceptor() {return new BasicAuthRequestInterceptor("jacky", "admin"); //Eureka添加了安全验证,则需要配置上面的用户名、密码}
}复制代码

九、MovieController.java

package com.jacky.cloud.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.jacky.cloud.entity.User;
import com.jacky.cloud.feign.UserFeignClient2;
import com.jacky.cloud.feign.UserFeignClient1;@RestController
public class MovieController {@Autowiredprivate UserFeignClient1 userFeignClient1;@Autowiredprivate UserFeignClient2 userfeignClient2;/*** 调用生产者服务* @param id* @return*/@GetMapping("/movie/{id}")public User findById(@PathVariable Long id) {return this.userFeignClient1.findById(id);}/*** 获得服务在eureka信息* @param serviceName* @return*/@GetMapping("/{serviceName}")public String findServiceInfoFromEurekaByServiceName(@PathVariable String serviceName) {return this.userfeignClient2.findServiceInfoFromEurekaByServiceName(serviceName);}
}复制代码

十、启动类ConsumerMovieFeignApplication.java

package com.jacky.cloud;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class ConsumerMovieFeignApplication {public static void main(String[] args) {SpringApplication.run(ConsumerMovieFeignApplication.class, args);}
}复制代码

标签: b2b2c, o2o电子商务, java多用户商城系统, spring cloud, java版社交电子商务

转载于:https://juejin.im/post/5cf61d10e51d45775313817e

java版spring cloud+spring boot+redis社交电子商务平台-docker-feign配置(五)相关推荐

  1. (十三)java版spring cloud+spring boot+redis社交电子商务平台-springboot集成spring cache...

    电子商务社交平台源码请加企鹅求求:一零三八七七四六二六.本文介绍如何在springboot中使用默认的spring cache, 声明式缓存 Spring 定义 CacheManager 和 Cach ...

  2. java版spring cloud+spring boot+redis社交电子商务平台(八)消息总线(Spring Cloud Bus)

    B2B2C电子商务平台源码请加企鹅求求:一零三八七七四六二六.Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来.它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控. ...

  3. java版spring cloud+spring boot+redis社交电子商务平台-spring-cloud-config

    社交电商平台源码请加企鹅求求:一零三八七七四六二六.创建配置管理服务器及实现分布式配置管理应用,实现统一配置管理. 提供三种方式: 基于git 基于svn(淘汰) 基于本地文件(测试使用) 如何使用 ...

  4. java版spring cloud+spring boot+redis社交电子商务平台(四)SpringBoot 整合JPA

    java b2b2c电子商务社交平台源码请加企鹅求求:一零三八七七四六二六.JPA全称Java Persistence API.JPA通过JDK 5.0注解或XML描述对象-关系表的映射关系,并将运行 ...

  5. springboot分销商城spring cloud+redis社交电子商务平台

    涉及平台:平台管理(包含自营店面).买家平台(PC端.H5/公众号.小程序.APP端(IOS/Android).微服务 核心架构:Spring Cloud.Spring Boot.Mybatis Pl ...

  6. (四)java版spring cloud+spring boot 社交电子商务平台-断路器(Hystrix)

    b2b2c电子商务社交平台源码请加企鹅求求:一零三八七七四六二六.在微服务架构中,根据业务来拆分成一个个的服务,服务与服务之间可以相互调用(RPC),在Spring Cloud可以用RestTempl ...

  7. (三)java版spring cloud+spring boot 社交电子商务平台 - Spring Cloud集成项目简介

    2019独角兽企业重金招聘Python工程师标准>>> 电子商务平台源码请加企鹅求求:一零三八七七四六二六.Spring Cloud集成项目有很多,下面我们列举一下和Spring C ...

  8. Java版知识付费源码 Spring Cloud+Spring Boot+Mybatis+uniapp+前后端分离实现知识付费平台

    提供职业教育.企业培训.知识付费系统搭建服务.系统功能包含:录播课.直播课.题库.营销.公司组织架构.员工入职培训等. 提供私有化部署,免费售后,专业技术指导,支持PC.APP.H5.小程序多终端同步 ...

  9. Java版分布式微服务云开发架构 Spring Cloud+Spring Boot+Mybatis+ElementUI

    鸿鹄云架构[系统管理平台]是一个大型 企业.分布式.微服务.云架构的JavaEE体系快速研发平台,基于 模块化.微服务化.原子化.热部署的设计思想,使用成熟领先的无商业限制的主流开源技术 (Sprin ...

  10. java电子商务系统源码 Spring MVC+mybatis+spring cloud+spring boot+spring security

    鸿鹄云商大型企业分布式互联网电子商务平台,推出PC+微信+APP+云服务的云商平台系统,其中包括B2B.B2C.C2C.O2O.新零售.直播电商等子平台. 分布式.微服务.云架构电子商务平台 java ...

最新文章

  1. 炸裂!VSCode 摸鱼神器!!!
  2. 寻找可用的机器学习算法
  3. EntityFramework 学习: Console中初见
  4. python基础(part11)-作用域LEGB
  5. 7-4 统计工龄 (20 分)(C语言实现)
  6. ***性测试是一种特殊的信息安全服务
  7. StringBuffer的基本使用
  8. 华为交换机关闭接口命令_华为路由交换机基础命令,看看你会哪些?
  9. 2022年下半年深圳地区数据分析师认证(CPDA),[进入查看]
  10. Java程序员必读的10本书籍
  11. 纪念盘古工坊开发的一款手机游戏正式发布
  12. 微信开发(微信扫一扫)商品创建
  13. CSS之background深度详解
  14. vscode创建工作区_VSCode 多文件夹工作区
  15. JavaScript - 日期型字符串增加天数(日期增加指定天数计算)
  16. 建筑安全检查标准怎么计算机,建筑施工安全检查标准评分 怎么算
  17. JAVASCRIPT之函数-输入秒J数转换成时分秒的一个小效果
  18. uniapp 打包安卓 Android 抖音app 前端篇~01
  19. Open-unmix测试demo
  20. Spring学习记录

热门文章

  1. 极客大学产品经理训练营 产品思维和产品意识 作业2
  2. php禁言时间开发,一起来捉妖禁言时间介绍_教程一览
  3. java timer.schedule如何控制执行次数_Java 面试——JIT详解
  4. 373.查找和最小的K对数字
  5. 116.填充同一层的兄弟节点
  6. 逆向:Windows消息钩取
  7. Raki的读paper小记:LAMOL: LANGUAGE MODELING FOR LIFELONG LANGUAGE LEARNING
  8. Tomcat一直启动不成功,连接不到8080(持续更新带图解释并总结了其他博文)
  9. java book_java_book java 图书管理系统 GUI - 下载 - 搜珍网
  10. c语言编写烟花程序,C语言烟花程序