SpringCloud微服务——feign集成实现服务间的接口调用

feign集成实现服务间的接口调用

feign说明:
feign整合了Ribbon(负载均衡)和Hystrix(熔断器),因此在SpringCloud微服务中,可以使用feign来替代Ribbon和Hystrix使用。
微服务中,feign的客户端可以单独放在一个子模块中,其中只需要写好一个feign客户端即可,feign客户端可以发http请求,从而调用其他服务的接口。

名词定义:
消费者:需要调用别的服务的一方;
生产者:服务被调用的一方;
都需要在注册中心eureka中注册。

在这里插入图片描述
在这里插入图片描述

1.生产者的服务接口准备(service的业务等省略)

就是需要被调用的接口方法:

    @Autowired
    private SearchService searchService;

    @PostMapping("/saveCourseDocToES")
    public AjaxResult saveCourseDocToES(@RequestBody CourseDoc courseDoc){
        return searchService.saveCourseDocToES(courseDoc);
    }

2.生产者(feign模块)导入feign的依赖包

既然是微服务,可以单独建一个模块,与要调用的服务模块(生产者)平级,放feign的客户端(通过feign客户端的http请求调用其他服务的接口)。

<!-- 导入feign的依赖 -->
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

3.编写FeignClient客户端(直接copy需要被调用的服务接口,不要方法体)

---- 客户端中的方法,和需要被调用的服务接口方法一一对应,不需要写方法体,此处只是将这个方法的调用,转成给对应服务名(此处是"SEARCH-SERVER")的http请求发出,找到真正的要调用的服务接口方法

/**
 *  对应消费端通过feign客户端调用了客户端的方法,
 * 	feign客户端根据调用的方法上的请求路径,发出http请求
 */
@FeignClient(value = "SEARCH-SERVER")
//@RequestMapping("")
public interface CourseDocFeignClient {
	//此处不能用@Postmapping简写,需要用@RequestMapping
    @RequestMapping(value = "/es/saveCourseDocToES",method = RequestMethod.POST)
    AjaxResult saveCourseDocToES(@RequestBody CourseDoc courseDoc);
}

4.消费者端的启动类上,加上注解@EnableFeignClients

1.pom中引入feign客户端的包;

<dependency>
    <groupId>cn.itsource.hb</groupId>
    <artifactId>hrm-search-feign</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

2.开启feign客户端接口:

@SpringBootApplication
@EnableEurekaClient //开启注册
@EnableCaching  //开启缓存
@EnableFeignClients   //开启feign接口注解
public class CourseServerApp1060 {
    public static void main(String[] args) {
        SpringApplication.run(CourseServerApp1060.class);
    }
}

5.业务调用

1.需要调用服务的地方,直接注入FeignClient客户端
2.用客户端对象直接调用对应的接口方法
3.Feign客户端会根据被调用的方法,发出对应的http请求,调用真正需要被调用的服务中的接口方法;

@Autowired
private CourseDocFeignClient courseDocFeignClient;
-----------------------------------------
//调用对应的feign客户端,保存数据到索引库
courseDocFeignClient.saveCourseDocToES(courseDoc);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值