SpringCloud之Feign调用

编程入门 行业动态 更新时间:2024-10-24 16:26:11

<a href=https://www.elefans.com/category/jswz/34/1769911.html style=SpringCloud之Feign调用"/>

SpringCloud之Feign调用

order-provider的bootstrap.yml文件配置:

spring:main:allow-bean-definition-overriding: trueapplication:name: order-providercloud:nacos:discovery:server-addr: http://127.0.0.1:8848/loginnamespace: 26b33e81-a3a7-44a1-97a8-3e71b8dc4c84group: DEV_GROUPconfig:server-addr: http://127.0.0.1:8848/loginfile-extension: ymlnamespace: 26b33e81-a3a7-44a1-97a8-3e71b8dc4c84group: DEV_GROUPshared-configs[0]:data-id: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}group: DEV_GROUPrefresh: true

order-provider的pom.xml文件配置:

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

order-provider的service文件注解:

import org.springframework.stereotype.Service;@Service
public class OrderServiceImpl {

order-provider的controller提供接口:

import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;@RestController
@RequestMapping("/feignClient")
public class OrderInfoServiceController {@ResourceOrderServiceImpl orderServiceImpl;@GetMapping("/getOrderBySupplierId")public List<Integer> getOrderBySupplierId(int supplierId) {return orderServiceImpl.getOrderBySupplierId(supplierId);}

外部服务调用:
after-sale-provider的pom.xml文件配置:

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>com.jumi.microservice</groupId><artifactId>order-api</artifactId><version>0.0.1-SNAPSHOT</version></dependency>

after-sale-provider的feignclient的OrderClient文件:

import com.jumi.microservice.feignclient.fallback.OrderFallBack;
import org.springframework.cloud.openfeign.FeignClient;@FeignClient(name = "order-provider", fallback = OrderFallBack.class)
public interface OrderClient {/*** 被调用者对应方法的路由(类和方法上的@RequestMapping)* 这里需要注意的两个地方* 1、在这里使用的GetMapping注解要和被调用发一致,如果还有问题就用@RequestMapping* 2、@PathVariable需要设置value,如果不设置也不能成功启动* 注意:* 1、路径* 2、Http方法必须对应* 3、使用requestBody,应该使用@PostMapping* 4、多个参数的时候,通过@RequestParam("id") int id方式调用* 5、对象参数,应该使用@SpringQueryMap* 6、不支持集合参数,应该使用数组如:int[] buyerIdArr*/@GetMapping("/feignClient/getOrderBySupplierId")List<Integer> getOrderBySupplierId(@RequestParam("supplierId") int supplierId);

after-sale-provider的feignclient-fallback的OrderFallBack文件:

/*** @author scw* fallback实现必须声明为spring 的bean,不然会提示fallback实现没有被实例化的错误*/
import com.jumi.microservice.feignclient.OrderClient;
import org.springframework.stereotype.Component;@Component
public class OrderFallBack implements OrderClient {/*** 熔断方法* 返回值要和被熔断的方法的返回值一致* 熔断方法不需要参数*/@Overridepublic List<Integer> getOrderBySupplierId(int supplierId) {return null;}

after-sale-provider的AdminRefundGoodsService文件:
 

import org.springframework.stereotype.Service;
import javax.annotation.Resource;@Service
public class AdminRefundGoodsService {@Resourceprivate OrderClient orderClient;

after-sale-provider的启动类AfterSaleProviderApplication文件:

import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;/*** Feign的源码实现的过程如下:* <p>* 1, 首先通过@EnableFeignCleints注解开启FeignCleint* 2, 根据Feign的规则实现接口,并加@FeignCleint注解* 3, 程序启动后,会进行包扫描,扫描所有的@FeignCleint的注解的类,并将这些信息注入到ioc容器中。* 4, 当接口的方法被调用,通过jdk的代理,来生成具体的RequestTemplate* 5, RequestTemplate在生成Request* 6, Request交给Client去处理,其中Client可以是HttpUrlConnection、HttpClient也可以是Okhttp* 7, 最后Client被封装到LoadBalanceClient类,这个类结合类Ribbon做到了负载均衡* <p>* 在工程的启动类中,通过@EnableDiscoveryClient向服务中心注册;通过@EnableFeignClients注解开启Feign的功能*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class AfterSaleProviderApplication {

备注:Nacos服务之间相互调用必须在同一命名空间下,否则调不到服务。

更多推荐

SpringCloud之Feign调用

本文发布于:2024-02-08 20:44:07,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1674842.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:SpringCloud   Feign

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!