天天看點

springboot+nacos+feign的簡單執行個體feign的簡單執行個體

feign的簡單執行個體

一、什麼是feign

Feign是Netflix開發的聲明式(目前由Spring在維護)、模闆化的HTTP用戶端, Feign可以幫助我們更快捷、優雅地調用HTTP API。

簡單的來說就是一個遠端調用服務的架構/工具,讓開發者以更少耦合更少代碼更快更相容的方法進行遠端服務調用

二、Feign功能

  • 可插拔的注解支援,包括Feign注解和JAX-RS注解;
  • 與Ribbon負載均衡器、Hystrix或Sentinel熔斷器無縫內建。
  • 支援可插拔的HTTP編碼器和解碼器;
  • 支援HTTP請求和響應的壓縮。

三、基本使用

建立spring-cloud-feign項目

項目結構

父:spring-cloud-feign

子子產品1:provider

子子產品2:consumer

添加依賴

整個項目的依賴(由于全寫在了父pom中,是以子依賴無需添加新的依賴)

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>
           

提供者:provider

1.提供者的application.yml

server:
  port: 8180 //伺服器端口
spring:
  application:
    name: test-feign-provider //提供者注冊的服務名稱
  cloud:
    nacos:
      discovery:
        server-addr: http://(nacos注冊中心ip):8848
        cluster-name: ${spring.application.name} //提供者注冊的服務名稱
           

2.提供者的Application

package com.smart.provider;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
 * 添加@EnableDiscoveryClient注冊服務
 */
@SpringBootApplication
@EnableDiscoveryClient 
public class ProviderApplication {
    public static void main(String[] args) {
        SpringApplication.run(ProviderApplication.class);
    }
}

           

3.提供者的Controller

package com.smart.provider.controller;


import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping
public class TestController {

    @RequestMapping(value = "/getStr",method = RequestMethod.GET)
    public String getStr(@RequestParam("stats") Integer stats){
        if (stats==1){
            return "對了";
        } else {
            return "錯了";
        }
    }
}

           

注意:@RequestParam(“stats”)一定要加上,否則會報錯

服務消費者:consumer

1.消費者的yml檔案:

server:
  port: 8083
spring:
  application:
    name: service-consumer
  cloud:
    nacos:
      discovery:
        server-addr: http://(nacos注冊中心ip):8848
        cluster-name: ${spring.application.name}
           

2.消費者的application

package com.smart.consumer;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
 * 通過@EnableFeignClients注解開啟對FeignClients的掃描
 */
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class ConsumerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ConsumerApplication.class);
    }
}

           

3.消費者的dao層

package com.smart.consumer.dao;


import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

@FeignClient("test-feign-provider")
public interface TestFeign {
    @RequestMapping(value = "/getStr",method = RequestMethod.GET)
    String getStr(@RequestParam("stats") Integer stats);
}

           

4.消費者的service層和impl

package com.smart.consumer.service;

public interface TestFeignService {

    String getTestStr(Integer stats);
}

           
package com.smart.consumer.service.impl;

import com.smart.consumer.dao.TestFeign;
import com.smart.consumer.service.TestFeignService;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
public class TestFeignServiceImpl implements TestFeignService {

    @Resource
    TestFeign testFeign;

    @Override
    public String getTestStr(Integer stats) {
        return testFeign.getStr(stats);
    }
}

           

5.消費者的Controller層

package com.smart.consumer.controller;


import com.smart.consumer.service.TestFeignService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
public class TestFeignController {
    @Resource
    TestFeignService testFeignService;

    @GetMapping("/getStr")
    public String getStr(Integer stats){
        String testStr = testFeignService.getTestStr(stats);
        return testStr;
    }
}

           

測試

分别注冊兩個服務到注冊中心nacos後,用postman測試

springboot+nacos+feign的簡單執行個體feign的簡單執行個體