3-Spring Cloud微服务快速搭建-Feign<OpenFeign>,本地开发调试指定URL路径,服务乱跳解决方案

修订日期 内容
2021-2-17 初稿

简述

我们都知道各个微服务会分开部署,那么服务之间如何通信呢?(比如:订单微服务需要查询物流微服务的物流信息),一般我们可以使用httpclient调用接口返回数据(比如json)就可以实现了。
feign也是在这个基础上更进一步,实现了如下功能:

  1. 各微服务直接的通信看起来像是本地调用一样(仅仅只是看起来像,省去了拼装解析报文,填写http的服务地址等步骤,其实也是http调用)
  2. 负载均衡
    (以上废话有点多,不看也行,下面直接开撸)

配置实现

1.引入maven依赖

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

2.创建feign客户端(暴露接口)

  1. 提供一个服务
	@RequestMapping(value = "/query/{id}")
    public String query(@PathVariable Long id){
    
    
        logger.info("开始调用物流信息:id={}",id);

        try {
    
    
        	//测试熔断时使用
            Thread.sleep(1000);
        } catch (InterruptedException e) {
    
    
            e.printStackTrace();
        }
        return "查询物流信息成功id:"+id;
    }
  1. 在调用服务方中创建feign客户端
    使用@FeignClient注解声明客户端
    【坑点】注意服务名千万不要有下划线,可以使用中划线
// name = 被调用的服务方名称,注意千万不要有下划线,可以使用中划线
@FeignClient(name = "express-service")
public interface ExpressFeign {
    
    

	//请注意将完整路径写在方法上,否则在hystrix熔断时可能会出现错误,该服务controller请自行实现
    @RequestMapping(value = "/express/query/{id}")
    String query(@PathVariable Long id);
}
  1. 在启动类中添加激活Feign调用
@SpringBootApplication
// 激活客户端 ,新版本可以省略
//@EnableEurekaClient,@EnableDiscoveryClient

// 激活feign调用
@EnableFeignClients
public class OrderServiceApplication {
    
    

    public static void main(String[] args) {
    
    
        new SpringApplicationBuilder(OrderServiceApplication.class).run(args);
    }

ExpressFeign 则可以直接@Resource引入调用即可

如何避免开发调试时服务乱跳

一般在开发环境,多人同时开发时很多人的服务都注册到同一个注册中心,自己新增的方法有时无法调用,如何解决呢?可以使用指定固定URL为本机的方式
下面express.debug.url 建议写在配置文件中,这样本地代码可以提交,生产上不用配置即可

@FeignClient(name = "express-service",url = "${express.debug.url}")
//@RequestMapping("/express")
public interface ExpressFeign {
    
    
}
express.debug.url=http://localhost:8080[自己的端口号]
# 生产环境不指定URL即可
express.debug.url=

Guess you like

Origin blog.csdn.net/weixin_48470176/article/details/113839707
Recommended