feign調用簡單實例

表述一個簡單的feign調用實現
注意:對象只能傳jsonString,不能傳層數多的對象,會丟數據。

1. 服務端

服務端添加一個client模塊,專門用於跨微服務之間的feign調用;
一下在該模塊中操作。

1.1 pom

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

1.2 feign接口

添加一個feign包,包中添加feign接口,用於調用該接口指向的業務實現代碼,
與feign包同級添加,對外的client客戶端。
在這裏插入圖片描述
feign接口代碼
它的業務實現代碼此處略。

package cn.cncomdata.snowflake.feign;

import cn.cncomdata.snowflake.vo.BaseVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

import java.util.List;

/**
 * author: xxx
 * date: 2019/1/21 13:57
 */
@FeignClient(name = "snowflake", url = "${snowflake.service.url}")
public interface SnowflakeFeignClient {

    @GetMapping("/id")
    BaseVO<Long> uniqueId();

}

client代碼

package cc.iooc.snowflake;

import cn.cncomdata.snowflake.feign.SnowflakeFeignClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @program: snowflake
 * @description: SnowflakeClient
 * @author: xxx
 * @create: 2019-03-21-12-51
 **/
@Component
public class SnowflakeClient {
    /**
     * snowflakeFeignClient
     */
    @Autowired
    private SnowflakeFeignClient snowflakeFeignClient;

    /**
     * uniqueId
     *
     * @return Long
     */
    public Long uniqueId() {
        return snowflakeFeignClient.uniqueId().getData();
    }

}

1.3 推送maven包管理倉庫

方便項目加載,需要打包後推送到公司的maven中央倉庫。

2.服務端

2.1 pom


        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.cncomdata</groupId>
            <artifactId>snowflake-client</artifactId>
            <version>1.0.0</version>
        </dependency>
    <repositories>
        <repository>
            <id>nexus</id>
            <name>nexus</name>
             <url>http://maven.cncomdata.cn/nexus/content/groups/public/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
        </repository>
    </repositories>

2.2 application.yaml

#本地調用可以IP加端口號
snowflake:
  service:
    url: ${snowflake_service_url:http://snowflake.test.yunmesh.com:10016}
feign:
  hystrix:
    enabled: false
  client:
    config:
      default:  # 服務名,default表示所有服務
        connectTimeout: 300000
        readTimeout: 300000
        loggerLevel: full

2.3 啓動類

添加@EnableFeignClients

package cn.cncmmdata.form;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.cloud.openfeign.EnableFeignClients;

/**
 * ElasticsearchApplication
 * @author admin
 */
@SpringBootApplication(scanBasePackages = {"cn.cncomdata", "cc.iooc"},
        exclude = {DataSourceAutoConfiguration.class})
@EnableFeignClients(basePackages = {"cn.cncomdata", "cc.iooc"})
@MapperScan("cn.cncomdata.form.repository")
public class FormApplication {

    /**
     * main
     *
     * @param args args
     */
    public static void main(String[] args) {
        SpringApplication.run(FormApplication.class, args);
    }

}

2.4 使用

package cn.cncomdata.form.controller;

import cc.iooc.snowflake.SnowflakeClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

/**
 * @Author: leimin
 * @Description: new class
 * @Date: 2020/6/18 13:45
 * @Version: 1.0
 */
@RestController
public class TestController {
    
    @Resource
    private SnowflakeClient snowflakeClient;

    /**
     *  id生成器
     * @return Long id
     */
    @GetMapping("/id")
    public  Long getId(){
        
        return snowflakeClient.uniqueId();
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章