前言
最近的springcloud项目的生产环境要使用k8s,由于k8s已提供service实现服务发现,与Eureka的功能有重叠,所以想要删除Eureka,但又想保持开发代码与生产环境一致,所以需要构建springcloud无注册中心本地开发环境来解决这个问题。
基本思路
feign调用从使用服务名改为使用url,其中url仍然使用服务名称,端口一律不写,默认80端口,k8s中创建服务名称也使用此名称;开发环境通过修改host与nginx代理转发url完成服务之间的调用。
完成后,开发环境代码上线无需进行任何修改可以部署至k8s环境,缺点是,本地调试时需要开启Nginx服务。
具体实现
处理feign代码
@FeignClient 配置url,实际访问http://user-service/,k8s的service名称建立时也需要固定为user-service。
@FeignClient(name="user-service", url="user-service")
添加本地host
host文件添加 127.0.0.1 服务名1 服务名2 服务名3 服务名4 ...
127.0.0.1 cloud-consumer user-service auth-service check-service
下载配置nginx
自行下载,在confi配置目录,新建proxy.conf,添加各服务的配置,关键点:server_name 服务名
proxy_pass 转发地址,按照实际情况编写。
### cloud-consumer ###
server {
listen 80;
server_name cloud-consumer;
index index.jsp index.html index.html index.shtml;
location / {
proxy_pass http://127.0.0.1:9001;
#Proxy Settings;
#proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
### auth-service ###
server {
listen 80;
server_name auth-service;
index index.jsp index.html index.html index.shtml;
location / {
proxy_pass http://127.0.0.1:9004;
#Proxy Settings;
#proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
修改 nginx.conf,将proxy.conf 包含入配置即可。
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
include proxy.conf;
}
完成
代码调试期间运行nginx即可,服务之间本地feign调用通信时,即可通过nginx转发至其他服务。