1. Feign
feign是个伪java http客户端,他在真正的http客户端HttpUrlConnection,HttpClient上包装了一次,可以通过注解的方式生成请求模板,简化开发。
2. 请求过程
首先根据feign的规则实现接口;其次接口方法被调用时,利用jdk代理生成RequestTemplate对象;然后ReqeustTemplate交给client执行;最后在执行的过程中被拦截器拦截,根据负载均衡策略选择真实访问的服务。
3.消费者搭建
3.1 pom依赖
<dependencies>
<dependency>
<groupId>com.honor</groupId>
<artifactId>interface</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<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.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
</dependencies>
3.2 yml配置
server:
port: 9002
eureka:
client:
serviceUrl:
defaultZone: http://eureka-server-7001:7001/eureka/,http://eureka-server-7002:7002/eureka/,http://eureka-server-7003:7003/eureka/
# defaultZone: http://eureka-server-8001:8001/eureka/
instance:
instance-id: eureka-provider-9002 # 服务名称
prefer-ip-address: true # 显示ip地址
info: # 点击注册列表未服务出现的信息
app.name: springcloud
company.name: www.honor.com
build.artifactId: @project.artifactId@
build.version: @project.version@
spring:
application:
name: eureka-consumer-feign
3.3 Feign客户端
// 这个是放在interface的接口,添加FeignClient注解。
@FeignClient("eureka-provider")
public interface IHelloService {
/**
* 打招呼
*
* @param name bb侠
* @return
*/
@GetMapping("/hello/{name}")
// @PathVariable必须包含名称,不然无法启动
String sayHello(@PathVariable("name") String name);
}
3.4 服务调用
// 服务名称,如果是集群需要指定统一的名字
@RestController
public class HelloController {
@Autowired
private IHelloService helloService;
@GetMapping("/hello/{name}")
public String sayHello(@PathVariable String name) {
return helloService.sayHello(name);
}
}
3.5 主启动类
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class EurekaConsumerFeign9002Application {
public static void main(String[] args) {
SpringApplication.run(EurekaConsumerFeign9002Application.class, args);
}
}
3.6 测试
浏览器访问http://localhost:9002/hello/kangkang
正常是轮询
本文介绍如何使用Feign简化微服务间的调用。通过配置pom依赖、yml参数,实现Feign客户端接口定义及服务调用,最终完成微服务消费者搭建。涉及Feign的请求过程、负载均衡策略及具体实现步骤。
167万+

被折叠的 条评论
为什么被折叠?



