表述一個簡單的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();
}
}