spring整合的两个微服务调用组件restTemplate和feign

restTemplate

spring 并未自动加载restTemplate到容器中, 使用需手动加入:
比如这样:

   @Bean
   @LoadBalanced //负载均衡
    public RestTemplate restTemplate(){
        return new RestTemplate(new OkHttp3ClientHttpRequestFactory());
    }

@LoadBalanced是负载均衡的注解, 声明使用Ribbon负载均衡器, 这与nginx有所区别, nginx是服务端负载均衡, 反向代理服务端(是服务端的代理人), ribbon是客户端的代理人.
restTemplate没有自动使用负载均衡, 这里使用@LoadBalanced手动引入Ribbon负载均衡器
Ribbon的本质是一个拦截器, 在调用restTemplate时, LoadBalancerInterceptor这个类将请求拦截, 在拦截器中RibbonLoadBalancerClient代理去查询服务地址, 然后根据策略选取一个地址给restTemplate去调用服务

feign

Feign是Netflix公司开源的轻量级rest客户端, spring将feign和ribbon整合在一起了,因此不需要手动配置负载均衡, 提供的坐标为:

 		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.netflix.feign</groupId>
            <artifactId>feign-okhttp</artifactId>
         </dependency>

举个feign调用远程服务的栗子:
启动类:(@EnableFeignClients声明feign客户端)

@EnableFeignClients
@SpringBootApplication
public class ManageCourseApplication {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(ManageCourseApplication.class, args);
    }
}

dao层接口调用:

@FeignClient(value = "XC-SERVICE-MANAGE-CMS") //需要调用的服务名(eureka注册中心微服务名字)
//和mybatis/jpa一样, 只需写接口或抽象方法,框架动态代理调用
public interface CmsPageClient {
    //根据页面id查询页面信息,远程调用cms请求数据
    @GetMapping("/cms/page/get/{id}")//用GetMapping标识远程调用的http的请求类型和请求地址
    public CmsPage findCmsPageById(@PathVariable("id") String id);

    //添加页面,用于课程预览
    @PostMapping("/cms/page/save")
    public CmsPageResult saveCmsPage(@RequestBody CmsPage cmsPage);
}

feign在三层架构的dao层, 它调用某个远程服务获取数据, 和调用mysql获取数据一样, 只不过此时提供数据的是我们自己写的微服务, 不管什么架构类型, 我们都是在写三层架构, 不过是每层采用了不同的实现
feign虽是dao层, 但其语法和controller层很类似
在类上加上@FeignClient(value = “XC-SERVICE-MANAGE-CMS”), 并指明需要调用的服务名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值