使用Feign实现消费者
-
-
- 1.创建普通springboot 工程
- 2.添加依赖
- 3.在入口类 添加注解 @EnableFeignClients
- 4.声明服务
- 5.使用Controller中调用服务
- 6.属性配置 yml文件
- 7.测试 (没有在新 消费者中设置hystrix熔断配置)
-
1.创建普通springboot 工程
2.添加依赖
<!-- springcloud 版本-->
<properties>
<spring.cloud-version>2020.0.0</spring.cloud-version>
</properties>
<dependencies>
<!-- eureka依赖 客户端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<!-- feign 整合了 ribbon负载均衡策略 和 hystrix 熔断器 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- hystrix包 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
</dependencies>
<!-- 需要添加依赖管理 管理springcloud -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring.cloud-version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 如果在maven中找不到 就去springcloud仓库找 -->
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/libs-milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
3.在入口类 添加注解 @EnableFeignClients
/*//SpringBoot注解
@SpringBootApplication
//激活Eureka客户端
@EnableEurekaClient
//开启断路器功能
@EnableCircuitBreaker*/
@SpringCloudApplication
@EnableFeignClients
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
4.声明服务
定义一个HelloService接口,通过@FeignClient注解来指定服务名称;进而绑定服务,然
后再通过SpringMVC中提供的注解来绑定服务提供者提供的接口,
如下:
Feign消费者 Service 声明远程服务
// Feign的客户端注解 绑定 远程服务提供者名称
@FeignClient("01-springcloud-service-provider")
public interface HelloService {
/**
* 声明一个方法,这个方法就是远程的服务提供者提供的那个方法
* @return
*/
@RequestMapping("/service/hello")
public String hello();
}
被声明的远程服务提供者 Controller中
@RestController
public class HelloController {
@RequestMapping("/service/hello")
public String hello(){
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("服务提供者---- 1");
return "服务提供者---- 1";
}
}
5.使用Controller中调用服务
feign这里主要是controller层,调用serivice层接口,service层具体实现远程调用服务提供者
@RestController
public class FeignController {
@Autowired
private HelloService helloService;
@RequestMapping("/web/hello")
public String hello(){
//调用声明式的接口方法,实现对远程服务的调用
//实际上就是调用service中声明的方法
return helloService.hello();
}
}
6.属性配置 yml文件
server:
port: 8087
spring:
application:
# 配置服务的名称
name: 05-springcloud-service-feign
eureka:
client:
# 注册中心连接地址 http://eureka8083:8083/eureka/,http://eureka8084:8084/eureka/
service-url.defaultZone: http://eureka8083:8083/eureka/,http://eureka8084:8084/eureka/
7.测试 (没有在新 消费者中设置hystrix熔断配置)
依次启动注册中心 服务提供者 和 feign实现服务消费,然后访问地址:
**确实有一个提供者里面有被0除 **
再来一次