# python-eureka-client
[![PyPI version](https://badge.fury.io/py/py-eureka-client.png)](https://badge.fury.io/py/py-eureka-client)
## Discription
This is an eureka client written in python, you can easily intergrate your python components with spring cloud.
## Support Python Version
Python 3.7+
*From `0.9.0`, python 2 is no longer supported, if you are using python 2, please use version `0.8.12`.*
## Why choose
* Register your python components to eureka server.
* Support failover.
* Support DNS discovery.
* Send heartbeat to eureka server.
* Pull registry from eureka server.
* Easy to use interface to use other REST service.
* HA when calling other REST service.
* Both trandictional and async def interfaces are provided.
* The http client lib is replacable.
## How to use
### Install
```Shell
pip install py_eureka_client
```
### Getting Start
This is the easiest way to use this component.
```python
import py_eureka_client.eureka_client as eureka_client
your_rest_server_port = 9090
# The flowing code will register your server to eureka server and also start to send heartbeat every 30 seconds
eureka_client.init(eureka_server="http://your-eureka-server-peer1,http://your-eureka-server-peer2",
app_name="your_app_name",
instance_port=your_rest_server_port)
```
Then, in your business code, use
```python
import py_eureka_client.eureka_client as eureka_client
res = eureka_client.do_service("OTHER-SERVICE-NAME", "/service/context/path")
print("result of other service" + res)
```
You can also use the `EurekaClient` class.
```python
from py_eureka_client.eureka_client import EurekaClient
client = EurekaClient(eureka_server="http://my_eureka_server_peer_1/eureka/v2,http://my_eureka_server_peer_2/eureka/v2", app_name="python_module_1", instance_port=9090)
await client.start()
res = await client.do_service("OTHER-SERVICE-NAME", "/service/context/path")
print("result of other service" + res)
# when server is shutted down:
await client.stop()
```
In fact, the `init` function is a facade of the EurekaClient, it holds a client object behind, you can get that by catching its return value or use `eureka_client.get_client()` to get it. The `init` function will automatically start the client, while using raw `EurekaClient`, you must call the `start()` and `stop()` method explicitly.
From `0.11.0`, all the methods in `EurekaClient` are defined `async`, and there are also async facade for `init`, `do_servise`, `stop` functions names `init_async`, `do_service_async`, `sto_async`.
### Registering to Eureka Server
The most common method to will be like:
```Python
import py_eureka_client.eureka_client as eureka_client
your_rest_server_port = 9090
eureka_client.init(eureka_server="http://your-eureka-server-peer1,http://your-eureka-server-peer2",
app_name="python_module_1",
instance_port=your_rest_server_port)
```
But if you have deploy your eureka server in several zones, you should specify the `eureka_availability_zones` parameter.
```python
import py_eureka_client.eureka_client as eureka_client
eureka_client.init(eureka_availability_zones={
"us-east-1c": "http://ec2-552-627-568-165.compute-1.amazonaws.com:7001/eureka/v2/,http://ec2-368-101-182-134.compute-1.amazonaws.com:7001/eureka/v2/",
"us-east-1d": "http://ec2-552-627-568-170.compute-1.amazonaws.com:7001/eureka/v2/",
"us-east-1e": "http://ec2-500-179-285-592.compute-1.amazonaws.com:7001/eureka/v2/"},
zone="us-east-1c",
app_name="python_module_1",
instance_port=9090,
data_center_name="Amazon")
```
If you are looking for flexibility, you should configure Eureka service URLs using DNS.
For instance, following is a DNS TXT record created in the DNS server that lists the set of available DNS names for a zone.
```
txt.us-east-1.mydomaintest.netflix.net="us-east-1c.mydomaintest.netflix.net" "us-east-1d.mydomaintest.netflix.net" "us-east-1e.mydomaintest.netflix.net"
```
Then, you can define TXT records recursively for each zone similar to the following (if more than one hostname per zone, space delimit)
```
txt.us-east-1c.mydomaintest.netflix.net="ec2-552-627-568-165.compute-1.amazonaws.com" "ec2-368-101-182-134.compute-1.amazonaws.com"
txt.us-east-1d.mydomaintest.netflix.net="ec2-552-627-568-170.compute-1.amazonaws.com"
txt.us-east-1e.mydomaintest.netflix.net="ec2-500-179-285-592.compute-1.amazonaws.com"
```
And then you can create the client like:
```python
import py_eureka_client.eureka_client as eureka_client
eureka_client.init(eureka_domain="mydomaintest.netflix.net",
region="us-east-1",
zone="us-east-1c",
app_name="python_module_1",
instance_port=9090,
data_center_name="Amazon")
```
You can specify the protocol, basic authentication and context path of your eureka server separatly rather than setting it at the URL.
```python
import py_eureka_client.eureka_client as eureka_client
eureka_client.init(eureka_domain="mydomaintest.netflix.net",
region="us-east-1",
zone="us-east-1c",
eureka_protocol="https",
eureka_basic_auth_user="keijack",
eureka_basic_auth_password="kjauthpass",
eureka_context="/eureka/v2",
app_name="python_module_1",
instance_port=9090,
```
or
```python
import py_eureka_client.eureka_client as eureka_client
eureka_client.init(eureka_server="your-eureka-server-peer1,your-eureka-server-peer2",
eureka_protocol="https",
eureka_basic_auth_user="keijack",
eureka_basic_auth_password="kjauthpass",
eureka_context="/eureka/v2",
app_name="python_module_1",
instance_port=9090)
```
*About the instance `IP` and `hostname`*:
If you are using a `Amazon` data center, `py-eureka-client` will try to use `local-ipv4` and `local-hostname` get from Amazon metadata service. In other cases, `py-eureka-client` will use the first non-loopback ip address and hostname from your net interface.
You can also specify both these tow field or just one of them explicitly:
```python
eureka_client.init(eureka_server="your-eureka-server-peer1,your-eureka-server-peer2",
eureka_protocol="https",
eureka_basic_auth_user="keijack",
eureka_basic_auth_password="kjauthpass",
eureka_context="/eureka/v2",
app_name="python_module_1",
instance_ip="192.168.10.168",
instance_host="my-py-component.mydomian.com",
instance_port=9090)
```
In some case you might have more than one interfaces attached, for example, you are running your application in a docker-container. In this case you can specify a network via `instance_ip_network` to be used to get the container's ip and host. You can use:
```python
eureka_client.init(eureka_server="your-eureka-server-peer1,your-eureka-server-peer2",
eureka_protocol="https",
eureka_basic_auth_user="keijack",
eureka_basic_auth_password="kjauthpass",
eureka_context="/eureka/v2",
app_name="python_module_1",
instance_ip_network="192.168.10.0/24",
instance_port=9090)
```
If you want to get the ip only and sepecify the host by yourself, try:
```python
import py_eureka_client.netint_utils as netint_utils
# you can get the ip only
ip = netint_utils.get_first_non_loopback_ip("192.168.10.0/24")
host = "my-py-component.mydomian.com"
eureka_client.init(eureka_server="your-eureka-server-peer1,your-eureka-server-peer2",
eureka_protocol="https",
eureka_basic_auth_user="keijack",
eureka_basic_
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
python-eureka-client-main.zip (19个子文件)
python-eureka-client-main
setup.py 62B
LICENSE 1KB
tests
__init__.py 0B
py_eureka_client
__init__.py 0B
test_http_basic_auth.py 2KB
eureka_server_parse_test.py 2KB
py_eureka_client
__init__.py 3KB
eureka_client.py 60KB
__dns_txt_resolver.py 1KB
http_client.py 5KB
netint_utils.py 2KB
logger.py 7KB
eureka_basic.py 21KB
__aws_info_loader.py 3KB
pyproject.toml 1021B
requirements.txt 30B
.gitignore 1KB
README.zh_cn.md 19KB
README.md 17KB
共 19 条
- 1
资源评论
流华追梦
- 粉丝: 3730
- 资源: 2061
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功