抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

1.Feign

Feign是一个http请求调用的轻量级框架,可以以Java接口注解的方式调用Http请求

因此

①:Feign被调用的接口是http接口,即为常见的Controller接口,可以简单理解为,Feign和前端,调用的接口是一样的

②:发起调用的一方,是通过注解,来发起http请求调用,接受Controller返回的参数使用

因此,对于初步接触使用Feign的人,重点是放在发起调用的一方,了解这方面的逻辑

2.创建被调用Feign接口

按常规模式创建Controller接口与实现类等,记下接口AIP地址,在本文3.C中使用

/flight/hlFlyCameraInfo/test

Controller

@Api(tags="摄像头信息")
@RestController
@RequestMapping("/flight/hlFlyCameraInfo")
@Slf4j
public class HlFlyCameraInfoController extends JeecgController<HlFlyCameraInfo, IHlFlyCameraInfoService> {

   @Autowired
   private CameraQuartz cameraQuartz;

    /**
     * 测试Feign接口
     */
    @AutoLog(value = "测试Feign接口")
    @ApiOperation(value="测试Feign接口", notes="测试Feign接口")
    @GetMapping(value = "/test")
    public String queryPage(@RequestParam(name="username") String username) {
       cameraQuartz.test("接受数据请求");
       return username;
    }
}

service

package org.jeecg.modules.flight.api;

public interface CameraQuartz {
    String test(String username);
}

serviceImpl

package org.jeecg.modules.flight.api.impl;

import org.jeecg.modules.flight.api.CameraQuartz;
import org.springframework.stereotype.Service;

@Service
public class CameraQuartzImpl implements CameraQuartz {
    @Override
    public String test(String username) {
        System.out.println(username);
        return username;
    }
}

3.创建发起调用的Feign接口

A.发起调用的微服务添加Feign组件:pom.xml

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

B.启动类Application添加注解,扫描注册Feign客户端

@EnableFeignClients(basePackages = {"org.jeecg.modules"})

需要注意的是basePackages是要在该路径下,找到C步骤中带有@FeignClient注解的接口

以C步骤中接口CameraTest的路径为例子

package org.jeecg.modules.system.service;

如果不写,就会去找路径下所有的类,没问题

如果写父路径,如org.jeecg,没问题,能找到这个类

如果写错路径,如org.jeecg.system,就会出问题,因为有这个注解,但是这个注解没能被扫描注册到

Field cameraTest in org.jeecg.modules.system.controller.SysPositionController required a bean of type ‘org.jeecg.modules.system.service.CameraTest’ that could not be found.

C.创建发起请求接口,注意是接口interface并配置相关注解

package org.jeecg.modules.system.service;

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

@FeignClient(name = "bcd-flight")
public interface CameraTest {

    @GetMapping(value = "/flight/hlFlyCameraInfo/test")
    String test(@RequestParam("username") String username);
}

其中

@FeignClient(name = “bcd-flight”)的作用,是要向这个bcd-flight微服务发起请求,注意,这是目标微服务名称,不是当前微服务名称

不知道微服务名称的,可以去目标微服务下application.yml看看

spring:
  application:
    name: bcd-flight

另一个注解,@GetMapping(value = “/flight/hlFlyCameraInfo/test”),就是要向这个http路径发起请求,也就是被调用的微服务下,controller的接口地址

可以看看上面二步骤记录的路径

String test(@RequestParam(“username”) String username); 就是被当前微服务使用,并发起请求的方法与传参

D.发起请求

在需要调用的地方,正常注入接口使用即可

@Autowired
private CameraTest cameraTest;

System.out.println(cameraTest.test("发起数据请求"));