首页 > 其他分享 >服务治理---注册中心,openfeign

服务治理---注册中心,openfeign

时间:2024-09-17 09:48:38浏览次数:3  
标签:服务 openfeign spring nacos --- 注册 日志 cloud

1.为什么会有注册中心?

        在微服务拆分的理念中,我们必须遵循每个服务尽量的完全独立,类独立,接口独立,方法独立,不依赖别的服务,这样就最大程度的耦合性降低。但随之而来的却是一系列问题,像我们一个接口可能就会调用别的服务的接口,这样就会逻辑上的跨越主机。但为了遵循服务独立的理念,我们在这种情况就可以选择远程调用,对别的服务发起网络请求,这样看似是解决了问题,但如果这个接口的并发量非常大,我们可以多搭建几个同样的服务供调用者来调用,但这时,发起网络请求就不知道请求谁了,比如某一个服务不能正常运行了,调用者不能实时监控这些服务,于是服务治理的理念就出来了。

        服务治理有三个角色:服务提供者,服务调用者,注册中心。当每个微服务运行起来的时候,就会去注册中心注册自己的信息,比如端口号,ip地址等等。当调用者需要调用的时候,就去注册中心去订阅服务,然后通过负载均衡的算法,选择某一个服务进行调用。并且服务供给者会和注册中心形成一个心跳,给注册中心汇报自己的健康情况,如果某个供给者没有汇报,那注册中心就会剔除这个供给者,并且给之前订阅过这个服务的调用者推送变更消息。

2.注册中心nacos

服务注册

要使用nacos,首先得让docker把nacos跑起来

然后引入依赖,配置naocs地址

<!--nacos 服务注册发现-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
 spring:
    application:
        name:xxx.service
    cloud:
        nacos:
          discovery:
            server-addr: 192.168.203.130:8848

然后运行这个服务,这个服务就会自动的去注册自己的信息到nacos,去nacos控制台就可以看见注册的服务了

服务发现

1.引入nacos的依赖和配置nacos地址

<!--nacos 服务注册发现-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
 spring:
    application:
        name:xxx.service
    cloud:
        nacos:
          discovery:
            server-addr: 192.168.203.130:8848

2.用DiscoverClient来调用获取服务实例

private final DiscoveryClient discoveryClient;

private void handleCartItems(List<CartVO> vos) {
    // 1.根据服务名称,拉取服务的实例列表
    List<ServiceInstance> instances = discoveryClient.getInstance("xxx.service");
    // 2.负载均衡,挑选一个实例
    ServiceInstance instance = instance.get(RandomUtil.randomInt(instances.size()));
    // 3.获取实例的ip和端口
    URI uri = instance.getUri(); //uri = http://your_ip:your_port
} 

3.openfeign怎么用

在spring7之前,负载均衡都用的是Ribbon,现在新版用的是openfeign。

3.1先引入依赖

  <!--openFeign-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-openfeign</artifactId>
  </dependency>
  <!--负载均衡器-->
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-loadbalancer</artifactId>
  </dependency>

3.2在启动类上加入@EnableFeignClients注解

3.3编写OpenFeign客户端

@FeignClient(value = "item-service")
public interface ItemClient {
    @GetMapping("/items")
    List<ItemDTO> getItemByIds(@RequestParam("ids") List<Long> ids);
}

3.4调用

List<ItemDTO> items = itemClient.getItemByIds(itemIds);

3.5 openfeign底层采用的是HttpURLConnection,效率低下,我们可以采用连接池的方式

引入依赖

<!--OK http 的依赖 -->
<dependency>
  <groupId>io.github.openfeign</groupId>
  <artifactId>feign-okhttp</artifactId>
</dependency>

yaml 开启连接池

feign:
  okhttp:
    enabled: true # 开启OKHttp功能

3.6 日志

OpenFeign只会在FeignClient所在包的日志级别为DEBUG时,才会输出日志。而且其日志级别有4级:

  • ONONE:不记录任何日志信息,这是默认值。
  • BASIC:仅记录请求的方法,URL以及响应状态码和执行时间
  • HEADERS:在BASIC的基础上,额外记录了请求和响应的头信息
  • FULL:记录所有请求和响应的明细,包括头信息、请求体、元数据

由于Feiqn默认的日志级别就是NONE,所以默认我们看不到请求日志

要自定义日志级别需要声明一个类型为Logger.Level的Bean,在其中日志级别为

public class DefaultFeignConfig {
    @Bean
    public Logger.Level feignLogLevel(){
        return Logger.Level.FULL;
    }
}

但此时这个Bean并未生效,要想配置某个FeignClient的日志,可以在@FeignClient注解中声明:

@FeignClient(vlaue = "item-service", configuration = DefaultFeignConfig.class)

如果想要全局配置,让所有FeignClient都按照这个日志配置,则需要在@EnableFeignConfig注解中声明:

@EnableFeignClients(defaultConfiguration = DefaultFeignConfig.class)

标签:服务,openfeign,spring,nacos,---,注册,日志,cloud
From: https://blog.csdn.net/iwjijksw/article/details/142298457

相关文章

  • 人工智能--运维应用
    最近在和小伙伴们探讨人工智能的一些方案,突发奇想,是否在网络传输中也能用到人工智能来解决现实中现象级的一些问题呢。目前我们大大小小的项目建设,常规到安防监控项目、机房项目、工业自动化项目、电子警察、、警察。。。等等,太多了,都和网络有着直接的关系,但实际在项目运维阶段,问......
  • Docker 进阶篇-CIG 重量级监控系统
    上一篇讲的是轻量级的监控工具,本文就来讲重量级的:CAdvisor+InfluxDB+Granfana,简称CIG。​‍‍dockerstats原生的Docker命令中,stats可以查看每个容器占用的CPU,内存,网络流量等情况:CONTAINERIDNAMECPU%MEMUSAGE/LIMITMEM%NETI/O......
  • 代码随想录算法 - 二叉树7
    题目1669.修剪二叉搜索树给你二叉搜索树的根节点root,同时给定最小边界low和最大边界high。通过修剪二叉搜索树,使得所有节点的值在[low,high]中。修剪树不应该改变保留在树中的元素的相对结构(即,如果没有被移除,原有的父代子代关系都应当保留)。可以证明,存在唯一的答案......
  • 太戈编程26-30题AC答案(第六期)
    26扫雷游戏普及-#include<bits/stdc++.h>usingnamespacestd;intmain(){   intm,n;   cin>>m>>n;   charx[m+2][n+2];   for(inti=1;i<=m;i++){      for(intj=1;j<=n;j++)        cin>>x[i][j];   }   for(i......
  • error: rpmdb, failed: BDB1507 Thread died in Berkeley DB library,error(-30973) fro
    rpm数据库错误,一般原因:yum更新等rpm软件安装进程被异常终止[root@49bdfccd7f61~]#yuminstall-yxxxerror:rpmdb:BDB0113Thread/process22858/140222685267712failed:BDB1507ThreaddiedinBerkeleyDBlibraryerror:db5error(-30973)fromdbenv->failchk:BDB0......
  • NOIP 2017 普及组初赛试题及解析(第三部分:阅读程序(3-4))
    ......
  • C语言-结构体-详解
    博客主页:【夜泉_ly】本文专栏:【C语言】欢迎点赞......
  • 鹏哥C语言39---函数的分类
    #define_CRT_SECURE_NO_WARNINGS//----------------------------------------------------------------------------------------------------------第三章.函数/*1 函数是什么2 C语言中函数的分类3 函数的参数4 函数的调用5 函数的嵌套调用和链式访问6 ......
  • 九、并查集-算法总结
    文章目录九、并查集9.1简介9.2数据结构9.2.1初始化9.2.2Quick-Find9.2.3Quick-Union9.2.4WeightedQuickUnion九、并查集9.1简介并查集用于处理不相交集合的合并与查询问题,常见操作有:查询:查询元素属于哪个集合,可用于判断元素是否在一个集合中合并:合并两......
  • fastapi-events fastapi 异步事件分发处理扩展
    fastapi-eventsfastapi异步事件分发处理扩展,提供了本地,以及远程消息处理能力,同时包含了一些内置的handler,对于自定义handler也是比较灵活的参考使用app.pyfromfastapiimportFastAPIfromfastapi.requestsimportRequestfromfastapi.responsesimport......