分布式-Feign 服务调用
Feign是一个声明性web服务客户端。它使编写web服务客户机变得更容易,本质上就是一个http,内部进行了封装而已。
角色:服务提供者,服务消费者,注册中心(上篇文章已搭建 搭建注册中心)
服务提供者:
写在前面:
1、经测试,默认情况下,feign只能通过@RequestBody传对象参数
2、接参只能出现一个复杂对象,例:public Result<List<UserVo>> list(@RequestBody UserVo entityVo) { ... }
3、提供者如果又要向其他消费者提供服务,又要向浏览器提供服务,建议保持原先的Controller,新建一个专门给消费者的Controller
依赖:
<!-- eureka-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
配置文件:
server.port=10084
spring.application.name=service-c
#eureka注册地址
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:1111/eureka/
#开启健康检查
eureka.client.healthcheck.enabled=true
# 续约更新时间间隔(单位秒,默认30秒)
eureka.instance.lease-renewal-interval-in-seconds=10
# 续约到期时间(单位秒,默认90秒)
eureka.instance.lease-expiration-duration-in-seconds=10
#注册在eurka信息
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=http://${spring.cloud.client.ip-address}:${server.port}
eureka.instance.hostname= ${spring.cloud.client.ip-address}
feign.hystrix.enabled=true
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000
hystrix.command.default.execution.timeout.enabled=false
feign.httpclient.connection-timeout=30000
测试接口:
@Value("${server.port}")
private String serverPort;
@Value("${spring.application.name}")
private String applicationName;
@RequestMapping("feign")
public String feign() {
return "我是" + applicationName + ",我的端口是" + serverPort;
}
启动项:
@EnableDistributedTransaction
@RefreshScope
@EnableFeignClients
@EnableEurekaClient
@SpringBootApplication
public class ServiceCApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceCApplication.class, args);
}
}
消费者:
依赖:
<!-- eureka-client -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- feign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
配置文件:
server.port=10084
spring.application.name=service-a
#eureka注册地址
eureka.client.serviceUrl.defaultZone=http://127.0.0.1:1111/eureka/
#开启健康检查
eureka.client.healthcheck.enabled=true
# 续约更新时间间隔(单位秒,默认30秒)
eureka.instance.lease-renewal-interval-in-seconds=10
# 续约到期时间(单位秒,默认90秒)
eureka.instance.lease-expiration-duration-in-seconds=10
#注册在eurka信息
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=http://${spring.cloud.client.ip-address}:${server.port}
eureka.instance.hostname= ${spring.cloud.client.ip-address}
feign.hystrix.enabled=true
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=5000
hystrix.command.default.execution.timeout.enabled=false
feign.httpclient.connection-timeout=30000
测试接口:
@FeignClient(name = "service-c", path = "/",fallbackFactory = CFeignFallbackFactory.class)
public interface CFeign {
//feign调用测试
@RequestMapping("feign")
public String feign();
}
启动项:
@EnableDistributedTransaction
@RefreshScope
@EnableFeignClients
@EnableEurekaClient
@SpringBootApplication
public class ServiceAApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceAApplication.class, args);
}
}
测试:启动注册中心,消费者,服务者,访问消费者的接口