文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

SpringCloud分布式微服务b2b2c电子商务docker-feign配置的示例分析

2023-06-05 04:39

关注

这篇文章主要介绍了SpringCloud分布式微服务b2b2c电子商务docker-feign配置的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

讨论一下feign配置,通过编写配置类,我们可以自定义feign的日志级别,日志扫描目录,可以通过feign调用服务在eureka上的调用信息。

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)

项目结构如下:

SpringCloud分布式微服务b2b2c电子商务docker-feign配置的示例分析

二、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-customizingserver:  port: 7901eureka:  client:    healthcheck:      enabled: true    serviceUrl:      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;@Configurationpublic class Configuration1 {  @Bean  public Contract feignContract() {    return new feign.Contract.Default();  }  @Bean  Logger.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;@Configurationpublic class Configuration2 {  @Bean  public 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;@RestControllerpublic class MovieController {  @Autowired  private UserFeignClient1 userFeignClient1;  @Autowired  private UserFeignClient2 userfeignClient2;    @GetMapping("/movie/{id}")  public User findById(@PathVariable Long id) {    return this.userFeignClient1.findById(id);  }    @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@EnableFeignClientspublic class ConsumerMovieFeignApplication {  public static void main(String[] args) {    SpringApplication.run(ConsumerMovieFeignApplication.class, args);  }}

感谢你能够认真阅读完这篇文章,希望小编分享的“SpringCloud分布式微服务b2b2c电子商务docker-feign配置的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯