向Eureka中注册Django项目
author: fengclchn@outlook.com
version:1.0
time: 05/21/2021
服务注册
- 项目环境下安装
py_eureka_client
包$ pip install py_eureka_client
- 在
manage.py
中加入如下内容:import py_eureka_client.eureka_client as eureka_client # 服务ip与端口 # server_host = "xxxxxx" # server_ip = "127.0.0.1" server_port = 8000 def eureka_init(): eureka_client.init(eureka_server="http://xxx.xxx.xxx.xxx:xxxxx/eureka/", app_name="host_name", # instance_host=server_host, # instance_ip=server_ip, instance_port=server_port, status_page_url="/xxxxxx/actuator/info", ha_strategy=eureka_client.HA_STRATEGY_RANDOM ) print("Eureka client is running")
-
参数含义如下:
- 自定义参数
参数 含义 备注 server_host 服务组件主机名 用于修改instance_host server_ip 服务组件ip 用于修改instance_ip server_port 服务组件端口 用于修改instance_port eureka_client.init()
参数
参数 含义 备注 eureka_server eureka注册地址 app_name 服务组件名 服务组件的名称,自定义 instance_host 服务组件主机名 可选参数,如果不填写会自动计算一个 instance_ip 服务组件ip 可选参数,如果不填写会注册当前服务所在ip instance_port 服务组件端口号 status_page_url 状态检测地址 在项目urls.py中书写,具体见本文状态检测 ha_strategy 调用其他服务时的高可用策略 可选参数,默认为随机 - 注意:
- instance_host:当前组件的主机名,可选参数,如果不填写会自动计算一个。如果服务和eureka服务器部署在同一台机器,则必须填写
instance_host
,否则会计算出127.0.0.1
- instance_host:当前组件的主机名,可选参数,如果不填写会自动计算一个。如果服务和eureka服务器部署在同一台机器,则必须填写
- 在
manage.py
主函数中添加此函数if __name__ == '__main__': eureka_init() main()
- 注意:
eureka_init()
函数必须在main()
函数之前,因为main()
函数相当于一个无限循环,只有当项目停止运行时才会出来
- 可以将2中的代码单独写一个文件,在
manage.py
文件中引入,例如:- manage.py
#!/usr/bin/env python """Django's command-line utility for administrative tasks.""" import os import sys from utils.eureka.euraka_init import eureka_init # 引入刚写的文件 def main(): """Run administrative tasks.""" os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'xxxxxx.settings') try: from django.core.management import execute_from_command_line except ImportError as exc: raise ImportError( "Couldn't import Django. Are you sure it's installed and " "available on your PYTHONPATH environment variable? Did you " "forget to activate a virtual environment?" ) from exc execute_from_command_line(sys.argv) if __name__ == '__main__': eureka_init() # Eureka注册函数 main()
- eureka.py
import py_eureka_client.eureka_client as eureka_client # 服务ip与端口 # server_host = "xxxxxx" # server_ip = "127.0.0.1" server_port = 8000 def eureka_init(): eureka_client.init(eureka_server="http://xxx.xxx.xxx.xxx:xxxxx/eureka/", app_name="host_name", # instance_host=server_host, # instance_ip=server_ip, instance_port=server_port, status_page_url="/xxxxxx/actuator/info", ha_strategy=eureka_client.HA_STRATEGY_RANDOM ) print("Eureka client is running")
- manage.py
状态检测
- 在
views
文件夹中(也可以是自己的视图函数路径)新增一个eureka.py
文件,在其中添加from rest_framework.views import APIView from rest_framework.response import Response class ActuatorInfo(APIView): authentication_classes = [] def get(self, request, *args, **kwargs): return Response("ActuatorInfo is OK") class ActuatorHealth(APIView): authentication_classes = [] def get(self, request, *args, **kwargs): return Response({ "status": "UP" })
- 在项目
urls.py
文件的urlpatterns中添加urlpatterns = [ ''' 其他业务接口 ''' # Eureka url(r"xxxxxx/actuator/info", eureka.ActuatorInfo.as_view()), url(r"xxxxxx/actuator/health", eureka.ActuatorHealth.as_view()) ]