SpringCloud学习之feign

一.关于feigin

  feigin是一种模板化,声明式的http客户端,feign可以通过注解绑定到接口上来简化Http请求访问。当然我们也可以在创建Feign对象时定制自定义解码器(xml或者json等格式解析)和错误处理。

二.添加SpringCloud对feign的支持

gradle配置:

compile(‘org.springframework.cloud:spring-cloud-starter-feign‘)

feigin最基本使用方法:

 1 interface GitHub {
 2   @RequestLine("GET /repos/{owner}/{repo}/contributors")
 3   List<Contributor> contributors(@Param("owner") String owner, @Param("repo") String repo);
 4 }
 5
 6 static class Contributor {
 7   String login;
 8   int contributions;
 9 }
10
11 public static void main(String... args) {
12   GitHub github = Feign.builder()
13                        .decoder(new GsonDecoder())
14                        .target(GitHub.class, "https://api.github.com");
15
16   // Fetch and print a list of the contributors to this library.
17   List<Contributor> contributors = github.contributors("OpenFeign", "feign");
18   for (Contributor contributor : contributors) {
19     System.out.println(contributor.login + " (" + contributor.contributions + ")");
20   }
21 }

feign发送json与xml的格式的http请求:

 1 interface LoginClient {
 2
 3   @RequestLine("POST /")
 4   @Headers("Content-Type: application/xml")
 5   @Body("<login \"user_name\"=\"{user_name}\" \"password\"=\"{password}\"/>")
 6   void xml(@Param("user_name") String user, @Param("password") String password);
 7
 8   @RequestLine("POST /")
 9   @Headers("Content-Type: application/json")
10   // json curly braces must be escaped!
11   @Body("%7B\"user_name\": \"{user_name}\", \"password\": \"{password}\"%7D")
12   void json(@Param("user_name") String user, @Param("password") String password);
13 }

注意示例中需要添加对gson的支持

feign发送https信任所有证书的代码:

 1 final TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
 2             @Override
 3             public void checkClientTrusted(
 4                     java.security.cert.X509Certificate[] chain,
 5                     String authType) {
 6             }
 7
 8             @Override
 9             public void checkServerTrusted(
10                     java.security.cert.X509Certificate[] chain,
11                     String authType) {
12             }
13
14             @Override
15             public java.security.cert.X509Certificate[] getAcceptedIssuers() {
16                 return null;
17             }
18         }};
19         final SSLContext sslContext = SSLContext.getInstance("TLSv1");
20         sslContext.init(null, trustAllCerts,
21                 new java.security.SecureRandom());
22         // Create an ssl socket factory with our all-trusting manager
23         final SSLSocketFactory sslSocketFactory = sslContext
24                 .getSocketFactory();
25         Feign.builder().client(new Client.Default(sslSocketFactory, (s, sslSession) -> true));

三.在SpringCloud中使用Feign

比如说注册中心有如下服务:

1)application.yml的配置:

spring:
  application:
    name: demo-consumer
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8080/eureka,http://localhost:8081/eureka
server:
  port: 8090

2)创建接口

 1 package com.bdqn.lyrk.consumer.demo.api;
 2
 3 import org.springframework.cloud.netflix.feign.FeignClient;
 4 import org.springframework.web.bind.annotation.RequestMapping;
 5
 6 @FeignClient("demo")
 7 public interface DemoConfigService {
 8
 9     @RequestMapping("/demo.do")
10     String demoService();
11 }

注意在接口上加上注解:@FeignClient("demo") 注解里的参数是在eureka注册的服务名

3)编写启动类:

package com.bdqn.lyrk.consumer.demo;

import com.bdqn.lyrk.consumer.demo.api.DemoConfigService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.context.ConfigurableApplicationContext;

@EnableDiscoveryClient
@EnableFeignClients
@SpringBootApplication
public class DemoConsumerProvider {

    public static void main(String[] args) {
        ConfigurableApplicationContext applicationContext = SpringApplication.run(DemoConsumerProvider.class, args);
        DemoConfigService demoConfigService = applicationContext.getBean(DemoConfigService.class);
        System.out.println(demoConfigService.demoService());
    }
}

注意在启动类上加上@EnableFeignClients来开启Feign功能

运行后输出:

此时我们可以发现使用feign客户端我们访问服务的代码简介了好多

原文地址:https://www.cnblogs.com/niechen/p/8151570.html

时间: 2024-10-05 16:30:21

SpringCloud学习之feign的相关文章

SpringCloud学习系列-Feign负载均衡(2)

Feign使用步骤 1.参考microservicecloud-consumer-dept-80   新建microservicecloud-consumer-dept-feign 修改主启动类名字DeptConsumer80_Feign_App 2.microservicecloud-consumer-dept-feign工程pom.xml修改,主要添加对feign的支持 <dependency> <groupId>org.springframework.cloud</gr

SpringCloud学习(5)——Feign负载均衡

Feign概述 Feign是声明式的Web服务客户端, 使得编写Web服务客户端变的非常容易, 只需要创建一个接口, 然后在上面添加注解即可. Feign旨在使编写Java Http客户端变的更容易. 在使用Ribbon+RestTemplate时, 利用RestTemplate对http请求的封装处理, 形成了一套模板化的调用方法.但是在实际开发中, 由于对服务依赖的调用可能不止一处, 往往一个接口会被多出调用, 所以通常都会针对每个微服务自行封装一些客户端类来包装这些以来服务的调用.所以Fe

Springcloud学习(三)——Feign

一.搭建项目 1.创建feign-consumer模块 pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http:

SpringCloud学习之Ribbon

一.负载均衡与Ribbon 负载均衡,在集群中是很常见的一个“名词”,顾名思义是根据一定的算法将请求分摊至对应的服务节点上,常见的算法有如下几种: 轮询法:所有请求被依次分发到每台应用服务器上,每台服务器需要处理的请求数目都相同,适合所有服务器硬件都相同的场景 随机法:请求被随机分配到各个应用服务器,在许多场合下,这种方案都很简单实用. 源地址哈希(Hash)法:将请求来源的IP地址进行Hash计算,得到对应的服务器,这样来自同一个IP的请求总在同一个服务器上处理 加权法:根据应用服务器配置的情

SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理

前言 在上篇中介绍了SpringCloud Zuul路由网关的基本使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由网关的过滤器Filter以及异常处理的教程. SpringCloud Zuul Filter 介绍 过滤器概述 Zuul的中心是一系列过滤器,能够在HTTP请求和响应的路由过程中执行一系列操作. 以下是Zuul过滤器的主要特征: 类型:通常在应用过滤器时在路由流程中定义阶段(尽管它可以是任何自定义字

SpringCloud学习系列之三----- 断路器Hystrix和断路器监控Dashboar

前言 本篇主要介绍的是SpringCloud中的断路器(Hystrix)和断路器指标看板(Dashboard)的相关使用知识. SpringCloud Hystrix Hystrix 介绍 Netflix创建了一个名为Hystrix的库,它实现了断路器模式.主要的目的是为了解决服务雪崩效应的一个组件,是保护服务高可用的最后一道防线. 开发准备 开发环境 JDK:1.8 SpringBoot:2.1.1.RELEASE SpringCloud:Finchley 注:不一定非要用上述的版本,可以根据

SpringCloud学习心得—1.3—Eureka与REST API

SpringCloud学习心得—1.3—Eureka与REST API Eureka的REST API接口 API的基本访问 Eureka REST APIEureka 作为注册中心,其本质是存储了每个客户端的注册信息,Ribbon 在转发的时候会获取注册中心的服务列表,然后根据对应的路由规则来选择一个服务给 Feign 来进行调用. 如果我们不是Spring Cloud 技术选型,也想用 Eureka,可以吗?完全可以. 如果不是 Spring Cloud 技术栈,推荐用 Zookeeper,

SpringCloud学习心得—1.2—Eureka注册中心的密码认证、高可用的设置

SpringCloud学习心得—1.2—Eureka注册中心的密码认证.高可用的设置 这是相关代码 链接 Eureka开启密码配置 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> 向properties添加密码与用户名 spr

SpringCloud学习之Stream消息驱动【自定义通道】(十一)

如果不清楚本篇内容的,请务必先去看完上一篇再看本篇,否则阅读起来可能会有部分障碍和困难: 上一篇文章<SpringCloud学习之Stream消息驱动[默认通道](十)>我们简单用自定义通道实现了消息发送和接收,但是用的是Stream给我们提供的默认Source,Sink,接下来我们要自己进行自定义,这种方式在工作中还是用的比较多的,因为我们要往不同的消息通道发消息,必然不能全都叫input,output的,那样的话就乱套了 (一)创建消息生产者[service-sender-stream-8