步骤
- 前提基于 Eureka Server 注册中心搭建完成
- 开始搭建Provider 和 Consumer 服务
- 通过Fegin 进行通信
搭建Eureka Provider
创建Eureka Provider工程 ;POM引入依赖 netflix-eureka-client
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</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-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
application.properties 配置注册中心
spring.application.name=spring-cloud-eureka-provider
server.port=9000
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
启动类
- 声明启用服务发现客户端
- 标注 @EnableDiscoveryClient 注解
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class EurekaConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaConsumerApplication.class, args);
}
}
提供一个HTTP服务
@RestController
@RequestMapping("/")
public class IndexController {
@RequestMapping("/hello")
public String hello(String name) {
return "hello" + name;
}
}
启动
- 前提需要Eureka Server 注册中心先行启动
- 启动注册完成
搭建Eureka Consumer
创建Eureka Consumer工程
- 引入netflix-eureka-client Eureka客户端jar包
- starter-openfeign feign 声明式调用jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter</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-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
配置服务实例,注册中心
spring.application.name=spring-cloud-eureka-consumer
server.port=8080
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/
启动类
- 开启Eureka服务发现 ;加上注解:@EnableDiscoveryClient
- 开始Feign 客户端声明式通信 ; 加上注解:@EnableFeignClients
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class EurekaConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaConsumerApplication.class, args);
}
}
声明Feign Client 接口;只需要接口方法
- @FeignClient 注解来生命;name 或 value 指定远程服务的实例名
- @RequestMapping 指定访问http 路径
- @RequestParam request请求参数
@FeignClient(name = "spring-cloud-eureka-provider")
public interface IndexRemote {
@RequestMapping(value = "/hello")
String hello(@RequestParam(value = "name") String name);
}
服务调用
@RestController
@RequestMapping("/")
public class ConsumerController {
@Autowired
private IndexRemote indexRemote;
@RequestMapping("/index/{name}")
public String index(@PathVariable("name") String name) {
return indexRemote.hello(name);
}
}
启动、调试调用
Eureka Provider集群;Feign负载均衡
Eureka Provider集群
- 配置集群 application.yml 文件 ;指定多个profiles
spring:
application:
name: spring-cloud-eureka-provider
profiles: provider1
server:
port: 9000
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8000/eureka/
---
spring:
application:
name: spring-cloud-eureka-provider
profiles: provider2
server:
port: 9001
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8000/eureka/
---
spring:
application:
name: spring-cloud-eureka-provider
profiles: provider3
server:
port: 9002
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8000/eureka/
@RestController
@RequestMapping("/")
public class IndexController {
@Value("${spring.profiles}")
private String profile;
@RequestMapping("/hello")
public String hello(String name) {
return "hello" + name + profile;
}
}
启动注册
- 三台Provider都启动成功
- 查看Eureka Server注册信息,注册成功
客户端调用调试
- 分别进行三次请求,默认轮询到Provider的三台节点
Feign
简单介绍
- Feign是一个声明式Web Service客户端。使用Feign能让编写Web Service客户端更加简单, 它的使用方法是定义一个接口,然后在上面添加注解,同时也支持JAX-RS标准的注解。
- Feign也支持可拔插式的编码器和解码器。Spring Cloud对Feign进行了封装,使其支持了Spring MVC标准注解和HttpMessageConverters。
- Feign可以与Eureka和Ribbon组合使用以支持负载均衡。
Feign Client的简单流程
- 首先通过@EnableFeignClients注解开启FeignClient的功能,才能在程序启动时开启对@FeignClient注解的包扫描
- 根据Feign的规则实现接口,并在接口上加上@FeignClient注解
- 程序启动时,进行包扫描,扫描@FeignClient注解的类,注入到IOC容器中
- 当接口被调用时,通过JDK的代理生成具体的RequestTemplate模板对象
- 根据RequestTemplate再生成Http请求的Request对象
- Request对象交由Client去处理,Client的网络请求框架可以是:HttpURLConnection、HttpClient和OkHttp
- 最后Client被封装到LoadBalanceClient类,该类结合Ribbon做到负载均衡