做类似交易猫的网站,网站开发过程的基本环节,网站制作昆山,济南装修网Feign简介#xff1a;
Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验。 Feign是在RestTemplate基础上封装的#xff0c;使用注解的方式来声明一组与服务提供者Rest接口所对应的本地…Feign简介
Feign是一种声明式、模板化的HTTP客户端。在Spring Cloud中使用Feign, 我们可以做到使用HTTP请求远程服务时能与调用本地方法一样的编码体验。 Feign是在RestTemplate基础上封装的使用注解的方式来声明一组与服务提供者Rest接口所对应的本地Java API接口方法。 Feign将远程Rest接口抽象成一个声明式的FeignClientJava API客户端并且负责完成FeignClient客户端和服务提供方的Rest接口绑定。
整体目录
feignconsumer消费方代码
为了让Feign知道在调用方法时应该向哪个地址发请求以及请求需要带哪些参数我们需要定义一个接口Spring Cloud应用在启动时Feign会扫描标有FeignClient注解的接口生成代理并注册到Spring容器中。生成代理时Feign会为每个接口方法创建一个RequetTemplate对象该对象封装了HTTP请求需要的全部信息请求参数名、请求方法等信息都是在这个过程中确定的Feign的模板化就体现在这里.
UserClient
package com.tt.consumer.client;import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;/*** 有关消费者client,配置需要调用服务者的名字*/
FeignClient(name tt-sc-feign-provide) //对应的要调用提供者服务名spring.application.name
public interface UserClient {/*** 通过用户id获取用户* param userId* return*/GetMapping(/user/getUser/{userId})//对应要调用提供者的controllerString getUser(PathVariable(userId) String userId);
}FeignConsumerController
package com.tt.consumer.controller;import com.tt.consumer.client.UserClient;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;/*** 平台controller业务逻辑引入client出发消费者调用提供者*/
Api(tags 用户模块)
RestController
RequestMapping(user)
public class FeignConsumerController {Value(${server.port})private String port;Resourceprivate UserClient userClient;/*** 通过用户ID获取用户* param userId* return*/ApiOperation(value 根据用户ID查询用户)GetMapping(/getUserInfo/{userId})public String getUserInfo(PathVariable(userId) String userId){String user userClient.getUser(userId);return String.format(【%s-Demo消费者】调用Feign接口返回值 %s, port, user);}}
NacosFeignConsumerApplication
package com.tt.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;
/*** 代表自己是一个服务消费者*/
SpringBootApplication
//声明此服务可作为消费者使用配置feign客户端目录
EnableFeignClients(basePackages com.tt.consumer.client)
public class NacosFeignConsumerApplication {public static void main(String[] args) {SpringApplication.run(NacosFeignConsumerApplication.class, args);}
}
application-dev.yml未配置信息bootstrap.yml如下
server:port: 8083
spring:profiles:active: devapplication:name: tt-sc-feign-consumercloud:nacos:username: nacospassword: nacosconfig:server-addr: 127.0.0.1:8848file-extension: ymldiscovery:server-addr: 127.0.0.1:8848pom.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdspringcloud/artifactIdgroupIdcom.example/groupIdversion0.0.1-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersionartifactIdfeignconsumer/artifactId
dependencies!-- 引入SpringCloud的Nacos server依赖 --!--服务发现pom--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactIdversion2.2.3.RELEASE/version/dependency!-- feign --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactIdversion2.2.1.RELEASE/version/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactIdversion2.2.3.RELEASE/version/dependencydependencygroupIdio.swagger/groupIdartifactIdswagger-annotations/artifactIdversion1.5.20/versionscopecompile/scope/dependency/dependencies/projectfeignprovide提供方代码
NacosFeignProvideApplication
package com.tt.feignprovide;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/*** 服务提供方-供feignclient使用**/
EnableDiscoveryClient
SpringBootApplication
public class NacosFeignProvideApplication {public static void main(String[] args) {SpringApplication.run(NacosFeignProvideApplication.class, args);}}
UserProvideController
package com.tt.feignprovide.controller;import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;Api(tags 用户模块)
RestController
RequestMapping(user)
public class UserProvideController {Value(${server.port})private String port;/*** 通过用户ID获取用户* param userId* return*/ApiOperation(value 根据用户ID查询用户)GetMapping(/getUser/{userId})public String getUser(PathVariable(userId) String userId){return String.format(【%s-服务提供者】%s, port, userId);}}
application-dev.yml未配置信息bootstrap.yml如下
server:port: 8082
spring:profiles:active: devapplication:name: tt-sc-feign-providecloud:nacos:username: nacospassword: nacosconfig:server-addr: 192.168.10.107:8848file-extension: ymldiscovery:server-addr: 192.168.10.107:8848
pom.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsdparentartifactIdspringcloud/artifactIdgroupIdcom.example/groupIdversion0.0.1-SNAPSHOT/version/parentmodelVersion4.0.0/modelVersion
!-- packagingpom/packaging--artifactIdfeignprovide/artifactIddependencies!-- nacos 客户端 作为 注册与发现--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactIdversion2.2.3.RELEASE/version/dependency!-- nacos 配置中心 --dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-config/artifactIdversion2.2.3.RELEASE/version/dependency!-- feign 调用服务接口 --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-openfeign/artifactIdversion2.2.1.RELEASE/version/dependencydependencygroupIdio.swagger/groupIdartifactIdswagger-annotations/artifactIdversion1.5.20/versionscopecompile/scope/dependency/dependencies/project父类pom.xml
?xml version1.0 encodingUTF-8?
project xmlnshttp://maven.apache.org/POM/4.0.0 xmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsdmodelVersion4.0.0/modelVersionpackagingpom/packagingmodulesmodulecommon/modulemodulemanage/modulemodulett-sc-generator/modulemodulefeignprovide/modulemodulefeignconsumer/module/modulesparentgroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-parent/artifactIdversion2.3.3.RELEASE/version
!-- version2.1.8.RELEASE/version--relativePath/ !-- lookup parent from repository --/parentgroupIdcom.example/groupIdartifactIdspringcloud/artifactIdversion0.0.1-SNAPSHOT/versionnamespringcloud/namedescriptionDemo project for Spring Boot/descriptionpropertiesproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingjava.version1.8/java.versionspring.boot.version2.3.3.RELEASE/spring.boot.versionspring.cloud.versionHoxton.SR8/spring.cloud.versionspring.cloud.sleuth.version2.2.3.RELEASE/spring.cloud.sleuth.versionswagger2.version2.9.2/swagger2.versionswagger-models.version1.6.0/swagger-models.versionswagger-annotations.version1.6.0/swagger-annotations.versiondruid.starter.vsersion1.1.21/druid.starter.vsersioncommons.lang.version2.4/commons.lang.versioncommons.lang3.version3.7/commons.lang3.versioncommons.collections.version3.2.1/commons.collections.versioncommons.io.version2.6/commons.io.versionspring.cloud.alibaba.version2.1.2.RELEASE/spring.cloud.alibaba.version/propertiesdependenciesdependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-dependencies/artifactIdversion${spring.cloud.version}/versiontypepom/typescopeimport/scope/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-test/artifactIdscopetest/scope/dependencydependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-alibaba-dependencies/artifactIdversion${spring.cloud.alibaba.version}/versiontypepom/typescopeimport/scope/dependency/dependenciesbuildpluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactId/plugin/plugins/build/project
测试结果