openFeign

之前我们也说了Ribbon+RestTemplate的组合调用微服务的模式
我们在RestTempkate上面加一个   @LoadBalanced就可以达到 客户端负载均衡的效果 

但是这种有个缺点就是

在这里插入图片描述

我们希望 调用的时候可以向我们service层面调用Dao层一样
@Autowired 注入 然后 类名.方法名

比如说dao.userDation() 直接调用这样简单明了
1.我们导入jar 在user项目中

在这里插入图片描述

2.添加注解 @EnableFeignClients  开启Feign调用
其实OpenFeign 底层封装了Ribbon

在这里插入图片描述

第三我们建一个Feign包
// 微服务的名称      前缀 
//@FeignClient(value = "mall-order",path = "/order")
@FeignClient(value = "mall-order")
public interface OrderFeign {
    @GetMapping("/")
     String getOrder();
}


  //1/ User中的Controller
    @GetMapping("/getUser4")
    public String getUser4(){
        String order = orderFeign.getOrder();
        log.info("invoke do Res   "+ order);
        System.out.println(order);
        return "helloUser。。。"+order;
    }

在这里插入图片描述

以上就是Feign的基本使用  但是如何自定义Feign.默认情况下Feign调用是没有日志的
我们需要通过自定义来打印我们的Feign的日志 (basic适 用于生产环境)

在这里插入图片描述

Full级别的
Step[1]  我们先加一个OrderCenterFeignConfig 表明是一个配置类 此时不要加@Configuration,标注此时日志级别为FULL ,这里代表 打印的日志级别是FULL 级别,这里代表具体打印什么

在这里插入图片描述

Step2  这里的configuration 指向 OrderCenterFeignConfig 就可以唉~

在这里插入图片描述

Step3
logging:
  level:
    com.lvhao.feign: DEBUG
在yaml中设置feign 包下面的日志级别为Debug 这里代表 输出到控制台上
FULL 级别下的日志~
2022-04-13 07:39:21.808 DEBUG 21216 --- [nio-9091-exec-3] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] ---> GET http://mall-order/ HTTP/1.1
2022-04-13 07:39:21.810 DEBUG 21216 --- [nio-9091-exec-3] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] ---> END HTTP (0-byte body)
2022-04-13 07:39:21.814 DEBUG 21216 --- [nio-9091-exec-3] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] <--- HTTP/1.1 200 (3ms)
2022-04-13 07:39:21.814 DEBUG 21216 --- [nio-9091-exec-3] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] connection: keep-alive
2022-04-13 07:39:21.814 DEBUG 21216 --- [nio-9091-exec-3] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] content-length: 9
2022-04-13 07:39:21.814 DEBUG 21216 --- [nio-9091-exec-3] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] content-type: text/plain;charset=UTF-8
2022-04-13 07:39:21.814 DEBUG 21216 --- [nio-9091-exec-3] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] date: Tue, 12 Apr 2022 23:39:21 GMT
2022-04-13 07:39:21.814 DEBUG 21216 --- [nio-9091-exec-3] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] keep-alive: timeout=60
2022-04-13 07:39:21.814 DEBUG 21216 --- [nio-9091-exec-3] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] 
2022-04-13 07:39:21.815 DEBUG 21216 --- [nio-9091-exec-3] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] hellOrder
2022-04-13 07:39:21.815 DEBUG 21216 --- [nio-9091-exec-3] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] <--- END HTTP (9-byte body)
HEADERS下的日志
2022-04-13 07:45:54.097 DEBUG 14080 --- [nio-9091-exec-2] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] ---> GET http://mall-order/ HTTP/1.1
2022-04-13 07:45:54.098 DEBUG 14080 --- [nio-9091-exec-2] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] ---> END HTTP (0-byte body)
2022-04-13 07:45:54.103 DEBUG 14080 --- [nio-9091-exec-2] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] <--- HTTP/1.1 200 (4ms)
2022-04-13 07:45:54.103 DEBUG 14080 --- [nio-9091-exec-2] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] connection: keep-alive
2022-04-13 07:45:54.103 DEBUG 14080 --- [nio-9091-exec-2] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] content-length: 9
2022-04-13 07:45:54.103 DEBUG 14080 --- [nio-9091-exec-2] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] content-type: text/plain;charset=UTF-8
2022-04-13 07:45:54.104 DEBUG 14080 --- [nio-9091-exec-2] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] date: Tue, 12 Apr 2022 23:45:54 GMT
2022-04-13 07:45:54.104 DEBUG 14080 --- [nio-9091-exec-2] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] keep-alive: timeout=60
BASIC 级别下的日志~
2022-04-13 07:47:38.341 DEBUG 16720 --- [nio-9091-exec-2] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] ---> GET http://mall-order/ HTTP/1.1
2022-04-13 07:47:38.349 DEBUG 16720 --- [nio-9091-exec-2] com.lvhao.feign.OrderFeign               : [OrderFeign#getOrder] <--- HTTP/1.1 200 (6ms)
-------------------------->>>>>>>>>>>>
NONE 当然没有日志打印了~  一般生产上打印BASIC 就可以
打印 HEADERS 以及FULL  日志多了 磁盘会撑不住的~
我们再说一个关于feign 的问题就是 Feign的拦截器配置
通过OpenFeign调用会丢失请求头的,这样最常见的例子就是jwt  用户登录 吧请求头的token 在user发送请求的时候携带过去

在这里插入图片描述


/**
 * <p>Title: GlFeignConfig</p>
 * Description:
 * date:2020/6/30 19:25
 */
@Configuration
public class GlFeignConfig {

	@Bean("requestInterceptor") // 给容器放入一个拦截器 feign  在远程调用之前先经过apply方法
	public RequestInterceptor requestInterceptor(){
		// Feign在远程调用之前都会先经过这个方法
		return new RequestInterceptor() {
			@Override
			public void apply(RequestTemplate template) {
				// RequestContextHolder拿到刚进来这个请求  拿到请求
				ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
				if(attributes != null){
					HttpServletRequest request = attributes.getRequest(); // 当前请求 同步请求头数据主要请求头
					if(request != null){
						// 同步请求头数据
						String cookie = request.getHeader("Cookie");
						// 给新请求同步Cookie
						template.header("Cookie", cookie);
					}
				}
			}
		};
	}
}

我们需要加入关于拦截器的配置 这样的话 请求头就不会丢失~ 就能通过user 服务发过来

配置中心nacos 什么是配置中心

在这里插入图片描述

我们都知道我们的微服务部署的时候,有生产,开发,其他环境,比如说Order服务, 然后这些环境对应一个application.prod来指定,  通过Spring.profile.active=prod/dev/other 来切换

但是这样做有什么缺点呢

1. 所有环境配置都是明文的,比如说db连接, redis连接这些
第二 不支持动态刷新,比如说我要更改db连接配置 更改完之后需要重启才可以生效唉~ 

根据以上问题 我们才有的配置中心
nacos 主要的2个功能一个做配置中心 一个做服务的注册和发现

关于配置中心  
无非就是发布配置
获取配置
删除配置

在这里插入图片描述

一样nacos 的配置中心的对外接口也是对外暴露的意味着我们可以用postman去点

在这里插入图片描述

根据这幅图,我们微服务需要解决的问题
1)我微服务怎么知道配置中心的地址
2)我微服务到底需要连接哪个环境
3)怎么找到nacos config上的对应的配置文件

nacos 配置中心也是 、
1.pom 2. 配置 (此时要写一个bootstrap.yml的配置文件)3. 注解
我们
@RefreshScope/* 动态从配置中心获取*/

在这里插入图片描述

我们需要
@RefreshScope/* 动态从配置中心获取*/  这样我们就可以做到配置从注册中心获取实时数据了 做到动态刷新
  ..nacos 的配置pom
   <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>

在这里插入图片描述

#bootstrap
spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml
  application:
    name: mall-user
  profiles:
    active: dev

在这里插入图片描述

然后
@Value("${isNewBus}")
private boolean isNewBus;
// 我们就可以看到效果了~
因为我们加入了@RefreshScope  
所以我们现在更改配置 为true 我们就不用重启项目
做到配置中心自动刷新了

在这里插入图片描述

以上就是nacos 配置中心的最简单的应用

现在 我各个环境的通用配置怎么配置
比如说我 生产,开发,测试  都要有这么一段配置 
server:
	servlet:
		context-path:/config-appp

在这里插入图片描述

我们可以去掉-dev来进行发布 现在我们重启下项目看看

在这里插入图片描述

我们还可以做到不同工程的相同配置  比如说 服务的注册我们可以吧这个作为公共配置放在nacos服务配置中 各个项目就可以不用配置了 直接读取

spring:

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        

在这里插入图片描述

比如说我此时建立一个yaml 的文件 comon.yaml  放的就是公共配置
我们可以 在 代码中这样配置
spring:
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml
        shared-dataids: comon.yaml
        refreshable-dataids: comon.yaml
  application:
    name: mall-user
  profiles:
    active: dev

在这里插入图片描述

然后吧mall-user
中application.yml 的yml中的有关服务注册与发现 
的ip去掉 重新启动项目  可以发现服务已经注册上来了

在这里插入图片描述

 comon.yaml  然后我们看  comon.yaml 已经加载过来了

在这里插入图片描述

nacos 底层用的derby内存型数据库存储的,
在集群配置的时候 比如说3台nacos节点,因为他们是内置db
每一份都有自己 配置他不能同步
所以我们要吧他们改成mysql  类似于这样的 nacos可以配置

我们可以在他的config-info  中更改他的db连接

在这里插入图片描述

当然nacos 还是支持配置的动态回滚的  比如说这里的更多
可以切换到以前的版本

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值