1.服务注册与发现 Eureka
//eureka客户端
eureka:
client:
service-url: //客户端注册到某eureka服务端的url地址
defaultZone: http://user:password123@localhost:9200/eureka/
register-with-eureka: false //是否将该应用注册到Eureka服务端
fetch-registry: true //是否从eureka服务端获取注册到服务端的客户端列表
server:
enable-self-preservation: false //是否开启自我保护机制
instance:
prefer-ip-address: true //是否将该应用的ip地址注册到eureka服务端,不然就注册该应用的主机名
2.负载均衡 Ribbon
@Bean
@LoadBalanced //添加负载均衡注解,该restTemplate就拥有了负载均衡的能力
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
//调用实例:
Boolean b = restTemplate.getForObject("http://com-hp-finder/exist/" + uid, Boolean.class);
3.容错处理 Hystrix
@HystrixCommand(fallbackMethod="errorUser") //如果请求出现错误,就会调用回退方法errorUser,
//该方法与getUser()拥有相同的参数与返回类型
@GetMapping("/XX")
public User getUser(){};
public String errorUser(){
return "请求用户出现错误!";
}
4.微服务网关 Zuul
@SpringBootApplication
@EnableZuulProxy //添加zuul注解,即可作为微服务网关
public class FinderzuulApplication {
public static void main(String[] args) {
SpringApplication.run(FinderzuulApplication.class, args);
}
}
zuul:
routes: //路由配置
user-route: //给路由起的名字
service-id: com-hp-finder-zuul //service-id:服务名
path: /app/** //服务名对应的路径
thread-pool:
use-separate-thread-pools: true //是否使用线程池
5.微服务配置 Config
@SpringBootApplication
@EnableConfigServer
public class AppApplication {
public static void main(String[] args) {
SpringApplication.run(AppApplication.class, args);
}
}
cloud:
config:
server:
git:
#配置git仓库的地址
uri:
#配置git仓库的账号
username:
#配置git仓库的密码
password:
#git创建的配置文件 v1-foo-dev.properties 内容为:profile=dev-1.0
#访问 http://localhost:8080/v1-foo/dev 就是获取了v1-foo-dev.properties配置文件里的内容
#configClient配置获取configserver的git配置文件
spring:
application: //对应config server所获取的配置文件的{application}
name: v1-foo
cloud:
config:
uri: http://localhost:8080/
profile: dev //profile对应config server所获取的配置文件中的{profile}
label:master //指定Git仓库的分支,对应config server所获取的配置文件的{label}
6.微服务跟踪 Sleuth
logging:
level:
root: INFO
org.springframework.web.servlet.DispatcherServlet: DEBUG
7.声明式REST调用 Feign
8.Docker入门
Docker常用命令
docker search 镜像名 搜索镜像
docker pull 镜像名 下载镜像
docker images 列出镜像
docker rmi 镜像名 删除镜像
docker save 保存镜像
docker load 加载镜像
docker build 构建镜像
docker容器常用命令:
docker run 新建并启动容器
docker ps 列出容器
docker stop停止容器
docker kill 强制停止容器
docker start 启动已停止的容器
docker restart 重启容器
docker attach 进入容器
docker rm 删除容器
docker export 导出容器 docker export red_panda > lastest.tar 将red_panda容器导出成latest.tar文件
docker import nginx2.tar nginx 从nginx2.tar导入,创建nginx镜像
9.Docker运行微服务
Dockerfile常用指令
ADD src dest 复制文件
ARG user1=someuser 设置构建参数
CMD ["executable","param1","param2"] 容器启动命令
COPY src dest 复制文件
ENTRYPOINT ["executable","param1","param2"] 启动命令,可多次设置,最后一个有效
ENV JAVA_HOME /path/to/java 设置环境变量
EXPOSE 声明暴露端口
FROM 指定基础镜像
LABEL key=value 为镜像添加元数据
MAINTAINER 指定维护者的信息
RUN ["executable","param1","param2"] 执行命令
USER daemon 设置用户
VOLUME /data 指定挂载点
WORKDIR /path/to/workdir 指定工作目录
1.在jar包所在目录创建Dockerfile文件
2.添加:
#基于哪个景象
FROM java:8
#将本地文件夹挂载到当前容器
VOLUME /tmp
#复制文件到容器
ADD XXX-0.0.1.jar /app.jar
#声明需要暴露的端口
EXPOSE 8761
#配置容器启动后执行的命令
ENTRYPOINT["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
3.使用docker build构建镜像
docker build -t itmuch/xx:0.0.1 仓库名称/镜像名称(:标签) Dockerfile的相对位置
4.启动镜像
docker run -d -p 8761:8761 itmuch /xx:0.0.1
5.推送镜像到docker hub
docker push itmuch/xx:0.0.1
推送到私有仓库:
docker push localhost:5000/itmuch/xx:0.0.1
Maven插件构建Docker镜像
<plugin>
<grouid>com.spotify</grouid>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>itmuch/xx:0.0.1</imageName>
<baseImage>java</baseImage>
<entryPoint>["java","-jar","/{project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}</include>
</resource>
</resources>
</configuration>
</plugin>
执行命令 mvn clean package docker:build
插件读取dockerfile进行构建
<plugin>
<grouid>com.spotify</grouid>
<artifactId>docker-maven-plugin</artifactId>
<version>0.4.13</version>
<configuration>
<imageName>itmuch/xx:0.0.1</imageName>
<dockerDirectory>${project.baseDir}/src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}</include>
</resource>
</resources>
</configuration>
</plugin>
10.Docker Compose编排微服务
1.在jar包当前目录创建Dockerfile
FROM java:8
VOLUME /tmp
ADD xx:0.0.1 app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 9000
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","app.jar"]
2.在当前目录创建docker-compose.yml
version: '3'
services:
eureka: #指定服务名称
build: #指定Dockerfile所在路径
ports:
-"8761:8761" #指定端口映射,类似docker run的-p选项,注意使用字符串形式
3.在docker-compose.yml所在路径执行命令
docker -compose up