SpringCoud Feignの使用概要

4361 ワード

概要
feignは声明式のweb serviceクライアントであり、マイクロサービス間の呼び出しをより簡単にした。Spring CloudはRibronとEurekaを統合しており、Feignを使用する際に負荷バランスのとれたhttpクライアントを提供することができます。
springcloudではRibboを用いて負荷の均衡だけでなくFeignも利用できます。FeignはRibbonを基礎とした改良を行い,負荷均衡をインターフェース方式で実現した。
使用
  • 導入依存
  • 
    <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    
  • 対応インターフェースを作成する
  • @Feign Client(value=「PROVIDER-NAME」)はFeign Clientであり、valueは必要なサービスIDを指定している。
    
    @FeignClient(value = "PROVIDER-NAME")
    public interface DeptClientService {
    //                  
        @RequestMapping(value = "/dev/add")
        boolean add(Dept dept);
    
        @RequestMapping(value = "/dev/{id}")
        Dept queryByID(@PathVariable("id") Long id );
    
        @PostMapping(value = "/dev/list")
        List<Dept> queryAll();
    }
    
    
  • Controllerを修正する
  • 私たちはRertTemplateを使わずに必要なオブジェクトを取得します。以前に定義されたインターフェースを通じて取得します。
    
    @RestController
    public class ConsumerController {
        @Autowired
        private DeptClientService service;
        @RequestMapping("/consumer/get/{id}")
        public Dept getByID(@PathVariable("id") Long id){
            return this.service.queryByID(id);
        }
        @RequestMapping("/consumer/add")
        public boolean add(String dname){
            Dept dept = new Dept();
            dept.setDname(dname);
            return this.service.add(dept);
        }
        @RequestMapping("/consumer/list")
        public List<Dept> list(){
            return this.service.queryAll();
        }
    
    }
    
  • 起動クラスを修正する
  • @EnbaleFeign ClientsオープンFeign負荷バランス
    
    @SpringBootApplication(scanBasePackages = "com")
    @EnableEurekaClient
    @EnableFeignClients(basePackages = "com.service")
    public class FeignApplication {
        public static void main(String[] args) {
            SpringApplication.run(FeignApplication.class,args);
        }
    }
    
    
  • 比較:
  • Ribbon
    
    public class ConsumerController {
        @Autowired
        private RestTemplate template;
        private static final String url="http://PROVIDER-NAME";
        @RequestMapping("/consumer/get/{id}")
        public Dept getByID(@PathVariable long id){
                                                    //     ,     
            Dept getEntity = template.getForObject(url + "/dev/" + id, Dept.class);
            return getEntity;
        }
        @RequestMapping("/consumer/add")
        public boolean add(String dname){
            Dept dept = new Dept();
            dept.setDname(dname);
            System.out.println(dept);
            //     ,     ,     
            return template.postForObject(url+ "/dev/add",dept,Boolean.class);
        }
        @RequestMapping("/consumer/list")
        public List<Dept> list(){
            //     ,     
            return template.postForObject(url+"/dev/list",void.class,List.class);
        }
    
    }
    
    Feign
    
    @RestController
    public class ConsumerController {
        @Autowired
        private DeptClientService service;
        @RequestMapping("/consumer/get/{id}")
        public Dept getByID(@PathVariable("id") Long id){
            return this.service.queryByID(id);
        }
        @RequestMapping("/consumer/add")
        public boolean add(String dname){
            Dept dept = new Dept();
            dept.setDname(dname);
            return this.service.add(dept);
        }
        @RequestMapping("/consumer/list")
        public List<Dept> list(){
            return this.service.queryAll();
        }
    
    }
    
    
    締め括りをつける
    Feignの使用はRibbonと違っています。
  • Feignはインタフェースを通して実現され、インタフェース向けプログラミングの習慣にもっと適合しています。
  • RibbonのControllerの中で私達はurlをつなぎ合わせなければならないが、Feignは私達のためにつなぎ合わせて
  • を行った。
    以上がSprigCloud Feignの使用概要の詳細です。SprigCloud Feignに関する資料は他の関連記事に注目してください。