一、项目架构介绍
项目使用的架构是springboot+springcloud的微服务架构。微服务注册中心使用eureka、网关使用zuul(zuul已经停止更新了,后期可以考虑升级为gateway),使用shiro做可配置的权限控制(当然后期还可以升级为springsecurity)。登录使用的是jwt的校验方式。各微服务间使用fegin进行接口调用和通信,使用hystrix做熔断和降级处理。使用springcloud的组件config做统一的配置文件管理。数据存储使用结构化数据库mysql,非结构化数据库redis。各服务器集群间通过nfs做文件共享。前端使用react,并通过nginx进行请求转发,使用zuul网关进行路由。项目架构图如下:
二、eureka的配置修改
我的eureka使用的是集群的方式。所以每个eureka都有其各自对应的配置文件。下面取其中一个的配置文件,作为例子进行讲解。
代码如下:
spring:
profiles:
active: peer1
application:
name: '@project.name@'
server:
port: 7000
eureka:
instance:
hostname: eureka01
leaseRenewalIntervalInSeconds: 5
server:
enable-self-preservation: true # 关闭自我保护模式(缺省为打开)
eviction-interval-timer-in-ms: 5000 # 续期时间,即扫描失效服务的间隔时间(缺省为60*1000ms)
client:
registerWithEureka: true
fetchRegistry: true # 表示是否从Eureka Server获取注册信息,默认为true。如果这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,就将其设为false。
serviceUrl:
defaultZone: http://eureka02:7001/eureka/,http://eureka03:7002/eureka/ # 设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。
# defaultZone: http://eureka02:7000/eureka/,http://eureka03:7000/eureka/ # 设置与Eureka Server交互的地址,查询服务和注册服务都需要依赖这个地址。默认是http://localhost:8761/eureka ;多个地址可使用 , 分隔。
logging:
level:
root: INFO
path: /logs/lls/lls-eureka1
file:
max-history: 30
三、编写dockerfile
FROM java:8
MAINTAINER yuangl@lenovoedu.com
WORKDIR /app
COPY ./${JAR_FILE} /app/app.jar
CMD java $JAVA_OPTS -jar app.jar
关于dockerfile的编写,在我上一篇文章中已经详细介绍了。$JAVA_OPTS表示在使用java -jar启动时,加入的自定义参数。可以通过这个参数自定义传入,application.yaml中的参数对应的值。具体原理参见这篇文章https://blog.csdn.net/yangsnow_rain_wind/article/details/81171251
四、自定义的启动命令
将写好的dockerfile文件和对应的jar包,放在同一文件夹下。执行docker命令,创建镜像并启动。
创建镜像命令:
docker build -t myTest:v1.0 .
启动命令如下:
docker run --name myTest -p 8002:8002 -e "JAVA_OPTS=-Deureka.client.serviceUrl.defaultZone=http://192.168.21.1:7000/eureka/ -Dspring.redis.prefix=test
-Dspring.redis.open=ture
-Dspring.redis.database=0
-Dspring.redis.host=192.168.21.1
-Dspring.redis.port=6379
-Dspring.redis.password=
-Dspring.redis.timeout=6000
-Dspring.pool.max-active=-1
-Dspring.pool.max-wait=-1
-Dspring.pool.max-idle=100
-Dspring.pool.min-idle=50
-Dspring.datasource.druid.url=jdbc:mysql://192.168.21.1:3306/lls?allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8
-Dspring.datasource.druid.username=root
-Dspring.datasource.druid.password=123456
-Deureka.instance.prefer-ip-address=true
-Deureka.instance.instance-id=192.168.21.1:8002
-Deureka.instance.ip-address=192.168.21.1 " -v /logs/lls/lls-test-server:/logs/lls/lls-test-server -v /usr/local/file/:/usr/local/file/ -d java/myTest:v1.0
至此,该微服务就定制化启动完毕了。
通过docker ps查看该镜像的运行状态。其余微服务同理!