关于Eureka的描述,可以参考Eureka简介,对Eureka和zookeeper对比,我个人觉得还是很容易看的明白的
Eureka作为服务的注册中心,即生产环境必须使用集群才能保证系统之间稳定运行
1、tornado集成eureka
参考Python Tornado之连接Eureka注册中心,pip install py_eureka_client
参考Tornado实现多线程、多进程HTTP服务配置多进程
import ssl
import py_eureka_client.eureka_client as eureka_client
import tornado.httpserver
import tornado.ioloop
import tornado.options
import tornado.web
import logging
import tornado.log
from tornado.options import define, options
ssl._create_default_https_context = ssl._create_unverified_context
define("port", default=3333, help="run on the given port", type=int)
class Test01Handler(tornado.web.RequestHandler):
def post(self):
pass
class Test02Handler(tornado.web.RequestHandler):
def post(self):
pass
class LogFormatter(tornado.log.LogFormatter):
'''打印日志'''
def __init__(self):
super(LogFormatter, self).__init__(
fmt='%(color)s[%(asctime)s %(filename)s:%(funcName)s:%(lineno)d %(levelname)s]%(end_color)s %(message)s',
datefmt="%Y-%m-%d %H:%M:%S",
)
if __name__ == "__main__":
# 解析命令行
tornado.options.parse_command_line()
# 注册eureka服务
eureka_client.init_registry_client(eureka_server='http://eureka1x:9091/eureka/,http://eureka2x:9092/eureka/',
app_name='your_app_name', instance_port='3333')
# 采用tornado定义接口服务
app = tornado.web.Application(handlers=[(r"/test01Query", Test01Handler), (r"/test02Query", Test02Handler)])
http_server = tornado.httpserver.HTTPServer(app)
http_server.listen(options.port)
# 指定进程数
http_server.start(4)
tornado.ioloop.IOLoop.instance().start()
启动命令
workdir=$(cd $(dirname $0); pwd)
cd $workdir
cd api
nohup python your_server.py &
echo "start webserver"
2 微服务docker
Dockerfile这里使用的是最基本的
FROM java:8
ADD bdo.jar /bdo.jar
EXPOSE 8765
ENTRYPOINT [ "java","-jar","/bdo.jar.jar" ]
docker编译操作过程如下
[root@bwhs162 Downloads]# ll
total 121496
-rw-r--r-- 1 root root 124406697 May 26 15:20 bdo.jar
-rw-r--r-- 1 root root 93 May 29 10:40 Dockerfile
# 这个地方最后有一个点,标识dockerfile所在目录
[root@bwhs162 Downloads]# docker build -t test/bdo:1.1 .
Sending build context to Docker daemon 124.4MB
Step 1/4 : FROM java:8
---> d23bdf5b1b1b
Step 2/4 : ADD bdo.jar /bdo.jar
---> 536d944097d7
Step 3/4 : EXPOSE 8765
---> Running in 556e07aab1ad
Removing intermediate container 556e07aab1ad
---> 288b0c2de654
Step 4/4 : ENTRYPOINT [ "java","-jar","/bdo.jar.jar" ]
---> Running in 6c2a74e994c2
Removing intermediate container 6c2a74e994c2
---> 2d5e01fdbf52
Successfully built 2d5e01fdbf52
Successfully tagged test/bdo:1.1
You have mail in /var/spool/mail/root
使用docker build
之后,就可以在docker images
中找到
执行启动命令时提示,这个是因为镜像的名字错了bdo:1.1
,正确的是docker images
中的内容,我执行docker run -d -p 8761:8765 test/bdo:1.1
就没有报错了. 8761
是映射到外部的接口,8765
是内部接口
[root@bwhs162 Downloads]# docker run -d -p 8761:8765 bdo:1.1
Unable to find image 'bdo:1.1' locally
docker: Error response from daemon: pull access denied for bdo, repository does not exist or may require 'docker login'.
See 'docker run --help'.
我们还可以执行命令docker login -u xxx -p xxx
,登录Docker Hub(https://hub.docker.com/)仓库,再执行docker push xxx:1.0
进行上传
# 需要删除的容器,通过下面命令查看id
docker ps -a
# 删除容器
docker rm 98d44c9550f5
# 删除镜像
docker image rm -f 2d5e01fdbf52
# 根据镜像id查看日志
docker logs -f 2d5e01fdbf52
# 停止服务,这里是容器id
docker stop 600eba249261
上面只是简单的配置,并没有用到docker的环境变量,使用起来也非常简单,在dockerfile中增加ENV
配置
FROM java:8
# 设置环境变量
ENV EUREKA_URL http://192.168.5.207:8761/eureka/,http://192.168.5.180:8761/eureka/,http://192.168.5.154:8761/eureka/
#
ADD bdo.jar /bdo.jar
EXPOSE 8765
ENTRYPOINT [ "java","-jar","/bdo.jar" ]
另外在springboot中yml中更改为如下面的,就可以
在Eureka中可以看到注册的服务,39b5548d41b1
是容器的id
在网上搜资料,很好奇怎么都叫Dockerfile这个名字,是否可以换个名字呢,这里做一下说明是可以的。
docker build -t bdo:0.5 -f Dockerfile_test .
,Dockerfile_test
就是我换了一个名字,这个是没有问题的