spring-cloud-eureka-open-feign

2022-03-25 14:26:20 浏览数 (1)

eureka-server服务(注册中心)

代码语言:html复制
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
代码语言:yaml复制
server:
  port: 8000
eureka:
  client:
    # 表示是否将自己注册到Eureka Server,默认为true。
    register-with-eureka: false
    # 表示是否从Eureka Server获取注册信息,默认为true。
    fetch-registry: false
    # 设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。
    # 默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。
    serviceUrl:
      defaultZone: http://localhost:${server.port}/eureka/
代码语言:java复制
@SpringBootApplication
@EnableEurekaServer
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

启动即可,注册中心即完成,如果是集群的话,则配置信息稍微有一些不一样。

注册中心节点可以配置多个,每一个的配置基本一致,只有部分却别,以伪集群为例:

代码语言:yaml复制
spring.application.name=spring-cloud-eureka
server.port=8000
# 对应的本机服务器名称
eureka.instance.hostname=server-1
# 指向其他服务器地址,多个之间以 , 隔开
eureka.client.serviceUrl.defaultZone=http://server-2:8001/eureka/,http://server-3:8002/eureka/
代码语言:yaml复制
spring.application.name=spring-cloud-eureka
server.port=8001
# 指向其他服务器地址,多个之间以 , 隔开
eureka.instance.hostname=server-2

eureka.client.serviceUrl.defaultZone=http://server-1:8000/eureka/,http://server-3:8002/eureka/
代码语言:yaml复制
spring.application.name=spring-cloud-eureka
server.port=8002
# 指向其他服务器地址,多个之间以 , 隔开
eureka.instance.hostname=server-3

eureka.client.serviceUrl.defaultZone=http://server-1:8000/eureka/,http://server-2:8001/eureka/

危机群服务在同一个服务器,则需要修改host文件,添加一下内容:

代码语言:json复制
127.0.0.1 server-1
127.0.0.1 server-2
127.0.0.1 server-3

OpenFeignClient

需要引入的依赖:

代码语言:text复制
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

配置信息:

代码语言:yaml复制
eureka:
  client:
    serviceUrl:
    # 配置注册中心地址
      defaultZone: http://localhost:8000/eureka/

服务提供方提供相应的接口即可,在配置类上添加注解@EnableEurekaClient

而服务消费方。除了以上配置以外,则需要额外的配置。

调用remote interface的配置

代码语言:java复制
// 此处的name与服务方配置的spring.application.name保持一致,
@FeignClient(name = "device-server")
public interface DeviceClient {

    // url 与你需要调用的服务方URL保持一致,包括请求方式
    @GetMapping("/test")
    void test(@RequestParam("ids") List<Long> ids);

    @GetMapping("/device/id")
    List<Long> getDeviceIds();

    @GetMapping("/device")
    List<OtaDeviceEntity> getDeviceByIds(@RequestParam("ids") List<Long> ids);
}

启动类:

代码语言:java复制
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class, args);
    }
}

Fiegn还要包含很多功能,比如服务降级服务熔断服务限流等等,此处不做赘述。关于feign get请求时以List做为参数,参数过长导致请求失败问题

网上很多说配置参数server. max-http-header-size无效,但是我测试该参数配置之后有效,但是我没有测试具体值,我测试的最大参数长度为100000,但是这种方式肯定并非治本方法,此处做一个记录而已。

代码语言:yaml复制
# 在服务端提供端配置该参数,
server:
# 单位b,此处的值是1MB,
  max-http-header-size: 1048576

OpenFeign的日志打印功能

OpenFeign的日志级别有:

NONE默认,不显示任何日志

BASIC: 仅记录请求方法、URL、响应状态码以及执行时间

HEADERS:除了BASIC 中自定义的信息外,还有请求和响应的信息头

FULL: 除了HEADERS中定义的信息外, 还有请求和响应的正文以及元数据。

注入以下bean:

代码语言:java复制
@Bean
Logger.Level feignLoggerLevel() {
    return Logger.Level.FULL;
}

设置日志监控界别:

代码语言:yaml复制
logging:
  level:
    #  feign日志以什么级别监控哪个接口(也就是哪一个feignClient,也可以直接指定整个目录)
    com.example.sc.feign.DeviceClient: debug
image.pngimage.png

0 人点赞