spring cloud脚手架项目(三)feign接口调用

前言

在结束技术选择和模块化项目搭建之后。我们的spring boot项目就可以启动了。这时候就需要聊到微服务的一个重大作用,RPC调用
文章参考:
feign问题处理:http://www.imooc.com/article/289005
如何调用feign:https://segmentfault.com/a/1190000012496398

feign

feign接口调用是spring cloud下常用的RPC调用,自带Spring Cloud Ribbon 与 Spring Cloud Hystrix,提供了方便的负载均衡和断融,降级等服务

代码

pom文件

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>

Service文件

import com.chen.service.requestDTO.TestHelloRequestDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;


@FeignClient(name = "SERVICE-A")
//@FeignClient注解value必须与服务客户端application.yml配置中服务命名对应
public interface TestService {
    @RequestMapping("/hello")
    public String hello(TestHelloRequestDTO requestDTO);
    @RequestMapping("/hi")
    public String hi();
}

serviceimpl文件

import com.alibaba.fastjson.JSON;
import com.chen.service.requestDTO.TestHelloRequestDTO;
import com.chen.service.TestService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;


@Slf4j
@RestController
public class TestServiceImpl implements TestService {

    @Override
    public String hello(@RequestBody TestHelloRequestDTO requestDTO) {
        log.info(JSON.toJSONString(requestDTO));
        return "hello";
    }

    @Override
    public String hi() {
        return "hi";
    }

}

启动类注解

@SpringBootApplication
//Spring boot启动类
@EnableEurekaClient
//eureka 注册类
@RestController
//一个spring mvc控制
@EnableDiscoveryClient
//eureka 发现
@EnableFeignClients(basePackages = {"com.chen.service"})
//feign包扫描

使用

坑点:
1.spring cloud feign接口无法调用。接口404或者调用后500,因为我把启动类的位置调整了。我们的默认包为com.chen.xxx,则启动类要放在com.chen下面
2.项目启动失败,原因有二,一是@FeignClient(name = “SERVICE-A”)注意括号中的name要和ymp配置中的服务命名对应,二是@RequestMapping这个注解我喜欢在类上注解一个,方法上也注解一个,这样可以方便的控制url的头部内容,但是feign有一个bug,无法做到,虽然这个bug之后修复了,但是老版本的feign不能再类上注解@RequestMapping,问题解决可以参考我上面发的链接
具体使用方法:
1.直接用serviceimpl+@Controller注解,即可调用对应的web接口返回结果
2.其他微服务,调用@Resource注解注入Service然后调用方法即可

结束

这样我们的基本的接口调用和MCV分层架构中的controller层就算是ok了。
github地址:https://github.com/alex9567/SpringCloudScaffold

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章