All Projects → KcangYan → nacos-python-sdk

KcangYan / nacos-python-sdk

Licence: Apache-2.0 license
python使用nacos的微服务sdk,以及python的熔断器和限流器

Programming Languages

python
139335 projects - #7 most used programming language

Labels

Projects that are alternatives of or similar to nacos-python-sdk

Onemall
芋道 mall 商城,基于微服务的思想,构建在 B2C 电商场景下的项目实战。核心技术栈,是 Spring Boot + Dubbo 。未来,会重构成 Spring Cloud Alibaba 。
Stars: ✭ 5,312 (+18871.43%)
Mutual labels:  nacos
learn
一个学习使用的综合项目。实现方案为spring cloud alibaba
Stars: ✭ 38 (+35.71%)
Mutual labels:  nacos
php-nacos
阿里巴巴nacos配置中心-PHP客户端
Stars: ✭ 167 (+496.43%)
Mutual labels:  nacos
Springcloud Learning
Spring Cloud基础教程,持续连载更新中
Stars: ✭ 6,839 (+24325%)
Mutual labels:  nacos
dnmp
docker-compose部署LNMP环境 Nginx/Openresty、MySQL(5.7、8.0、8.1)、PHP7.4(8.0、5.6)、Redis5.0、PHPMyAdmin、Xdebug、RabbitMQ、Nacos
Stars: ✭ 138 (+392.86%)
Mutual labels:  nacos
spring-cloud
🔥 Develop distributed application services based on SpringCloud architecture model and components
Stars: ✭ 36 (+28.57%)
Mutual labels:  nacos
Gpmall
【咕泡学院实战项目】-基于SpringBoot+Dubbo构建的电商平台-微服务架构、商城、电商、微服务、高并发、kafka、Elasticsearch
Stars: ✭ 4,241 (+15046.43%)
Mutual labels:  nacos
docker-case
这个项目主要是为了快速拉起docker服务
Stars: ✭ 31 (+10.71%)
Mutual labels:  nacos
xmutca-rpc
Xmutca-rpc是一个基于netty开发的分布式服务框架,提供稳定高性能的RPC远程服务调用功能,支持注册中心,服务治理,负载均衡等特性,开箱即用。
Stars: ✭ 18 (-35.71%)
Mutual labels:  nacos
midwayjs-crud
基于 Typescript+MidwayJs+Nacos 的微服务开发架构
Stars: ✭ 45 (+60.71%)
Mutual labels:  nacos
Microservices Platform
基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba并采用前后端分离的企业级微服务多租户系统架构。并引入组件化的思想实现高内聚低耦合,项目代码简洁注释丰富上手容易,适合学习和企业中使用。真正实现了基于RBAC、jwt和oauth2的无状态统一权限认证的解决方案,面向互联网设计同时适合B端和C端用户,支持CI/CD多环境部署,并提供应用管理方便第三方系统接入;同时还集合各种微服务治理功能和监控功能。模块包括:企业级的认证系统、开发平台、应用监控、慢sql监控、统一日志、单点登录、Redis分布式高速缓存、配置中心、分布式任务调度、接口文档、代码生成等等。
Stars: ✭ 3,274 (+11592.86%)
Mutual labels:  nacos
sparkzxl-framework
sparkzxl 基于spring boot的组件库
Stars: ✭ 20 (-28.57%)
Mutual labels:  nacos
JavaFamily
【Java面试+Java学习指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。
Stars: ✭ 517 (+1746.43%)
Mutual labels:  nacos
Springcloud
基于SpringCloud2.1的微服务开发脚手架,整合了spring-security-oauth2、nacos、feign、sentinel、springcloud-gateway等。服务治理方面引入elasticsearch、skywalking、springboot-admin、zipkin等,让项目开发快速进入业务开发,而不需过多时间花费在架构搭建上。持续更新中
Stars: ✭ 6,997 (+24889.29%)
Mutual labels:  nacos
DiscoveryPlatform
☀️ Nepxion DiscoveryPlatform is a platform for Nepxion Discovery with service governance, release orchestration, flow inspection, instance blacklist, gateway route 服务治理、蓝绿灰度编排、流量侦测、实例摘除、网关路由的平台
Stars: ✭ 63 (+125%)
Mutual labels:  nacos
Discovery
☀️ Nepxion Discovery is a solution for Spring Cloud with blue green, gray, route, limitation, circuit breaker, degrade, isolation, tracing, dye, failover 蓝绿、灰度、路由、限流、熔断、降级、隔离、追踪、流量染色、故障转移
Stars: ✭ 4,658 (+16535.71%)
Mutual labels:  nacos
mall4cloud
⭐️⭐️⭐️ Springcloud商城 O2O商城 小程序商城 PC商城 H5商城 APP商城 Java商城 分销商城 多用户商城 uniapp商城 微服务商城
Stars: ✭ 3,915 (+13882.14%)
Mutual labels:  nacos
taotao-cloud-project
微服务开发脚手架,包括大数据模块、微服务模块、前端模块。基于Spring Cloud Alibaba的微服务架构。提供技术框架的基础能力的封装,减少开发工作,只关注业务,包含了工作以来的工作总结和技术沉淀
Stars: ✭ 76 (+171.43%)
Mutual labels:  nacos
spring-cloud-alibaba-component
Sample of Spring Cloud Alibaba component
Stars: ✭ 50 (+78.57%)
Mutual labels:  nacos
skycloud-base
🔥springcloud脚手架,配置中心(apollo/nacos) 注册中心(consul/nacos) 分布式事物(seata) 调用链(skywalking) 日志(ELK)监控(prometheus与grafana) 等,适合学习与快速开发使用
Stars: ✭ 80 (+185.71%)
Mutual labels:  nacos

我自己写的nacos sdk 和 熔断器 还有 限流器 代码和案例都在这

python nacos sdk

python nacos 负载均衡消费者

python 熔断器

python 限流器

使用说明

1. python nacos sdk

导入sdk

在自己的项目中使用
pip install KcangNacos 

import KcangNacos.nacos as nacos

如果你下载了这个demo里的源代码的话
import nacos

创建初始nacos连接对象

nacosServer = nacos.nacos(ip=nacosIp,port=nacosPort)

nacos远程配置中心

 nacosServer.config(dataId="demo-python.json",group="dev",tenant="python",myConfig=myConfig.GlobalConfig)
 执行以上代码即可启动加载远程配置中心,并实时监听配置中心变化,及时变更本地配置      
 其中tenant=namespaceId,目前只支持 nacos config json格式的配置     
 myConfig.GlobalConfig为用户本地的配置类对象,必须是dict。     
 启动后会根据远程配置中心的json数据按键值装配到已导入的本地配置类里。

nacos服务注册

 nacosServer.registerService(serviceIp=myConfig.ip,servicePort=myConfig.port,serviceName="python-provider",
                        namespaceId="python",groupName="dev")
 执行以上代码即可启动nacos服务注册,会将实例注册进nacos注册中心

nacos进程健康检查

  nacosServer.healthyCheck()
  执行以上代码即可开启本地naocs进程的健康检查      
  考虑到本地的服务注册和远程配置中心监听进程的安全,怕他万一挂掉,所以设置这个功能
  该服务会检查naocs进程是否健康,如果挂掉了会自动把进程重启     
  怕影响本地服务性能的可以不开,但建议还是开着。      
  那如果万一健康检查线程也挂了怎么办?可以利用nacos对象里的healthy属性获得当前健康进程的秒级时间戳 
  可以利用 int(time.time()) - nacosServer.healthy 获得健康检查进程的执行时间,时间过长则认为挂掉了
  再执行一次这行代码就可以重新启动检查检查进程

2. python nacos 负载均衡消费者

  nacosClient = nacos.nacosBalanceClient(ip=nacosIp, port=nacosPort,
                                   serviceName="python-provider",
                                   group="dev", namespaceId="python")
  建立nacosBalanceClient对象,使用注解
  @nacosClient.customRequestClient(method="GET", url="/api/test1")
  def apiTest1(): #无参数GET接口
      pass
      
  @nacosClient.customRequestClient(method="GET", url="/api/test2")
  def apiTest2(id1: int, id2: int): #带参数GET RESTFUL接口 即 /api/test2/id1/id2
      pass

  @nacosClient.customRequestClient(method="POST", url="/api/test3")
  def apiTest3(formData): #POST 传formData格式数据接口,传入一个dict对象
      pass

  @nacosClient.customRequestClient(method="POST", url="/api/test4", requestParamJson=True)
  def apiTest4(jsonData): #POST 传json格式数据接口,传入一个dict对象,内置了对象转str
      pass  
      
  @nacosClient.customRequestClient(method="GET", url="/api/test5")
  def apiTest5(*args,**kwargs): #对于非RESTFUL的get请求也可以使用
      pass    
  #传入键值对即可 如  传入   apiTest5(x=1,y=2) 即  /api/test5?x=1&y=2 
     
  在路由方法中直接调用注解了的接口函数即可 
  @app.route(Router + "/test1", methods=['GET'])
  def consumerTest1():
       return consumerDemo.apiTest1()     
       
  customRequestClient方法自带负载均衡   
  
  客户端自带了一个 timeout 和 error fallback 函数,并且默认超时时间是3秒,如果你想自定义

  def errorFun():
      return "自定义错误函数"
  或者
  def errorFun(*args):
      for item in args:
          print(item)
      return "自定义错误"

  nacosClient = nacos.nacosBalanceClient(ip=nacosIp, port=nacosPort,
                               serviceName="python-provider",
                               group="dev", namespaceId="python",timeout=3,
                               timeOutFun=errorFun,fallbackFun=errorFun)
  设置timeout为服务超时时间。
  
  客户端自带了一个 timeout 和 error fallback 函数,并且默认超时时间是3秒,如果你想自定义

  def errorFun():
      return "自定义错误函数"
  或者
  def errorFun(*args):
      for item in args:
          print(item)
      return "自定义错误"

  nacosClient = nacos.nacosBalanceClient(ip=nacosIp, port=nacosPort,
                               serviceName="python-provider",
                               group="dev", namespaceId="python",timeout=3,
                               timeOutFun=errorFun,fallbackFun=errorFun)
  设置timeout为服务超时时间。

3. python 熔断器

  在自己的项目中使用
  pip install KcangFuse

  import KcangFuse.funcFuse as funcFuse

  如果你下载了这个demo里的源代码的话
  import funcFuse
  
  
  使用说明:
   
  def myFallBackFunc(*args,**kwargs):#自定义熔断返回函数
      return "function fallback " + "  function info: " + str(args)+ " " + str(kwargs)

  def myTimeoutFallbackFunc(ex, *args,**kwargs): #自定义错误返回函数
      print(ex)
      return "function time out " + "  function info: " + str(args)+ " " + str(kwargs)

  def myExceptFallbackFunc(ex, *args,**kwargs): #自定义超时返回函数
      return "function except " + str(ex) + "  function info: " + str(args)+ " " + str(kwargs)
      
  当开启熔断时,即返回自定义熔断返回函数,不开启根据情况返回其他两个
  
  SimpleFuncFuse1 = funcFuse.funcFuse()#不设置则使用内置默认错误返回函数
  
  注意:注解需声明在函数上方,不可以在@app这个注解上方,否则不生效!
  
  @app.route(Router + "/test1", methods=['GET'])
  @SimpleFuncFuse1.fuse(timeout=2)
  def fuseTest1():#超时返回自定义超时错误返回函数
      time.sleep(3)
      return "ok"
  
  
  SimpleFuncFuse2 = funcFuse.funcFuse(timeoutFallbackFunc=myTimeoutFallbackFunc,
                                     exceptFallbackFunc=myExceptFallbackFunc)
  可以尝试让路由映射的函数发生异常,熔断器会将详细的函数信息返回给自定义异常返回函数,交由你自己处理                                   
  @app.route(Router + "/test2/<int:x>/<int:y>", methods=['GET'])
  @SimpleFuncFuse2.fuse()
  def fuseTest2(x,y):
      z = x/y #路由中输入0尝试错误返回自定义函数
      return str(z)
  
  fuseStatus=True时则表示开启熔断器模式
  exceptPercent=0.5, 0-1之间 异常比例,即在熔断统计时间窗口期内发生异常的比例
  timeWindows=5, 单位:秒 熔断时间窗口期,即触发熔断后熔断多久,熔断时间窗口期过去后,会自动再放开请求进去,
                 如果异常比例还是很高的话,则继续熔断。
  timeCount=2, 单位:秒 熔断统计异常时间窗口期,即统计异常的时间段长度。建议1-2秒
  SimpleFuncFuse3 = funcFuse.funcFuse(fallbackFunc=myFallBackFunc)
  @app.route(Router + "/test3", methods=['GET'])
  @SimpleFuncFuse3.fuse(timeout=2,fuseStatus=True,exceptPercent=0.5,timeWindows=5,timeCount=2)
  def fuseTest3(): #超时熔断
      time.sleep(3)
      return "ok"

  @app.route(Router + "/test4/<int:x>/<int:y>", methods=['GET'])
  @SimpleFuncFuse3.fuse(fuseStatus=True, exceptPercent=0.5,timeWindows=5,timeCount=2)
  def fuseTest4(x, y):
      z = x / y  # 路由中输入0尝试错误熔断
      return str(z)

4. python 限流器

  在自己的项目中使用
  pip install KcangFuse

  import KcangFuse.funcFuse as funcFuse

  如果你下载了这个demo里的源代码的话
  import funcFuse
  
 
  建立限流器类,并赋予自定义的限流返回函数
  flowControl = funcFuse.funcFlowControl(fallBackFunc=myFallBackFunc)
  
  timeWindows=2, 单位秒 限流时间窗口期
  maxCount=5  允许请求数 即 在限流时间窗口期内 最多允许5个请求在处理,可以理解为最多五个线程
  @app.route(Router + "/test5", methods=['GET'])
  @SimpleFuncFuse3.fuse(timeout=2)
  @flowControl.flowControl(timeWindows=2,maxCount=5)
  def fuseTest5(): #尝试这个demo 即可
      time.sleep(3)
      return "ok"
      
  可以尝试一下下面这个demo调用上面这个接口,看看效果
  def t5(count):
      re = requests.get("http://127.0.0.1:8080/fuse/test5")
      print(re.text + " 当前线程:"+str(count)+"\n")

  if __name__ == '__main__':
     import requests,threading
     for i in range(0,200):
         threading.Thread(target=t5,args=(i,)).start()
     time.sleep(5)
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].