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);
}
}
启动即可,注册中心即完成,如果是集群的话,则配置信息稍微有一些不一样。
注册中心节点可以配置多个,每一个的配置基本一致,只有部分却别,以伪集群
为例:
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
文件,添加一下内容:
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
的配置
// 此处的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
,但是这种方式肯定并非治本方法
,此处做一个记录而已。
# 在服务端提供端配置该参数,
server:
# 单位b,此处的值是1MB,
max-http-header-size: 1048576
OpenFeign的日志打印功能
OpenFeign的日志级别有:
NONE
:默认
,不显示任何日志
BASIC
: 仅记录请求方法、URL、响应状态码以及执行时间
HEADERS
:除了BASIC 中自定义的信息外,还有请求和响应的信息头
FULL
: 除了HEADERS中定义的信息外, 还有请求和响应的正文以及元数据。
注入以下bean
:
@Bean
Logger.Level feignLoggerLevel() {
return Logger.Level.FULL;
}
设置日志监控界别:
代码语言:yaml复制logging:
level:
# feign日志以什么级别监控哪个接口(也就是哪一个feignClient,也可以直接指定整个目录)
com.example.sc.feign.DeviceClient: debug