SpringCloud(三)微服务之间的通信Restful

目录

 

一.RestTemplateto通信

1.第一种调用方式

2.第二种调用方式

3.第三种调用方式(使用server_id)

二.Feign

1.介绍

2.使用


一.RestTemplate通信

1.第一种调用方式

RestTemplate restTemplate = new RestTemplate();
String data = restTemplate.getForObject("http://localhost:8773/hi?name=ceshi",String.class);

2.第二种调用方式

  @Autowired
  private LoadBalancerClient loadBalancerClient;
  //第二种调用方式
  RestTemplate restTemplate = new RestTemplate();
  ServiceInstance serviceInstance = loadBalancerClient.choose("provider");
  String url = String.format("http://%s:%s",serviceInstance.getHost(),serviceInstance.getPort());
  String data = restTemplate.getForObject(url,String.class);

3.第三种调用方式(使用server_id)

  RestTemplate restTemplate = new RestTemplate();
  String data =  restTemplate.getForObject("http://service-provider/hi?name=" + name, String.class);

负载均衡:在启动类中加入RestTemplate中bean和LoadBalanced注解

@Bean
@LoadBalanced
RestTemplate restTemplate()
{
   return new RestTemplate();
}

再通过注解直接使用restTemplate

@Autowired
RestTemplate restTemplate;

配置负载均衡规则。默认是轮询规则
 

service-provider.ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

以上配置修改为随机规则。

二.Feign

1.介绍

Feign是一个声明式的Web服务客户端,使用Feign可使得Web服务客户端的写入更加方便。
它具有可插拔注释支持,包括Feign注解和JAX-RS注解、Feign还支持可插拔编码器和解码器、Spring Cloud增加了对Spring MVC注释的支持,并HttpMessageConverters在Spring Web中使用了默认使用的相同方式。Spring Cloud集成了Ribbon和Eureka,在使用Feign时提供负载平衡的http客户端。

2.使用

pom.xml文件加入配置

<dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-feign</artifactId>
     <version>1.4.0.RELEASE</version>
</dependency>

在启动类中加入注解
@EnableFeignClients
@EnableCircuitBreaker

//value=“你用到的服务名称”
@FeignClient(value = "service-provider",fallbackFactory = FeignFallBackFactory.class)
public interface HelloServiceFeign {
    //服务中方法的映射路径
    @RequestMapping("/hi")
    String hi(@RequestParam(value = "name") String name);
}


@Resource
HelloServiceFeign helloServiceFeign;

其中FeignFallBackFactory是错误回调处理
 

/**
 * 此类表示FallBack执行的时候,打印相应的日志
 * 如果需要访问产生回退触发器的原因,可以使用@ feignclient中的fallbackFactory属性。
 *
 */
@Component
public class FeignFallBackFactory implements FallbackFactory<HelloServiceFeign> {

    private static final Logger LOGGER = LoggerFactory.getLogger(FeignFallBackFactory.class);

    @Override
    public HelloServiceFeign create(Throwable arg0) {
        FeignFallBackFactory.LOGGER.info("fallback; reason was: {}", arg0.getMessage());
        return new HelloServiceFeign() {
            @Override
            public String hi(String name) {
                return "提供者服务出错";
            }
        };
    }
}

在application.properties中开启断路器功能

#断路器
feign.hystrix.enabled=true

当微服务之间调用出错的时候,会进入feignFallBackFactory进行错误处理。
feign的理念类似于android的Retrofit,用接口注解的方式进行http请求。

PS:Feign中进行token传递方式一般是在Feign拦截器中进行的,但是,当开启断路器的时候,再feign中不能获取request,是由于hystrix线程切换导致的,所以需要在feign的config配置中指定bean

@Bean
@Scope("prototype")
public Feign.Builder feignBuilder() {
    return Feign.builder();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值