SpringCloud 和 SpringBoot 版本选择对应:
版本对应:https://start.spring.io/actuator/info
Cloud官网:Spring Cloud
中文网:Spring Cloud中文网-官方文档中文版
在官网可以查看 当前Cloud 推荐的Boot版本:
当前技术栈选型和停更图(2020年):
创建聚合工程 (使用Maven 或 Spring Initializr 都是可以的):
JDK版本改为8:
注解激活生效:新版的lonbok好像需要勾选:
字符编码集UTF-8:
注意点 1:
# <!-- 统一管理jar包版本 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<junit.version>4.12</junit.version>
<log4j.version>1.2.17</log4j.version>
<lombok.version>1.16.18</lombok.version>
<mysql.version>5.1.47</mysql.version>
<druid.version>1.1.16</druid.version>
<mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
</properties>
# 引用时
# <dependencyManagement> 标签<!--子模块继承之后,提供作用:锁定版本+子module不用写groupId和version-->
<dependencyManagement>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>${mysql.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>${druid.version}</version>
</dependency>
</dependencyManagement>
# <!-- 引入自己定义的api通用包,分布式项目里面可以共享该项目里面的所有class-->
<dependency>
<groupId>com.zbx.springcloud</groupId> //创建工程时候的完整包名
<artifactId>cloud-api-commons</artifactId> //工程的名字 (如下图)
<version>${project.version}</version> //当前自己pom里面定义的版本号 (固定这样写就可以了)
</dependency>
注意点 2:
使用 Run Dashboard (批量 Run):
- 当前.idea 下 workspace.xml
- 找到 <component name="RunDashboard"> 标签 第一行应该是 <option name="ruleStates">
- 添加 <component name="RunDashboard">
<option name="configurationTypes">
<set>
<option value="SpringBootApplicationConfigurationType" />
</set>
</option>
<option name="ruleStates"> 添加到 <option name="ruleStates"> 标签上面即可
注意点3:
所有的微服务,一定要有自己的微服务名称,在配置文件里面进行配置
1.服务注册与发现:
什么是服务治理:
- 在传统rpc远程调用中,服务与服务依赖关系,管理比较复杂,所以需要使用服务治理,管理服务与服务之间依赖关系,可以实现服务调用、负载均衡、容错等,实现服务发现与注册。
在服务注册与发现中,有一个注册中心,当服务器启动的时候,会把当前自已服务器的信息 比如 服务地址通讯地址等以别名方式注册到注册中心上。另一方(消费者|服务提供者),以该别名的方式去注册中心上获取到实际的服务通讯地址,然后在实现本地rpc调用远程。
可用组件:
DiscoveryClient 对象 (Spring提供):
Spring Cloud Commons 提供的抽象
最早的时候服务发现注册都是通过DiscoveryClient来实现的,随着版本变迁把DiscoveryClient服务注册抽离出来变成了ServiceRegistry抽象,专门负责服务注册,DiscoveryClient专门负责服务发现。还提供了负载均衡的发现LoadBalancerClient抽象。
DiscoveryClient通过@EnableDiscoveryClient的方式进行启用。
- 从Spring Cloud Edgware开始,
@EnableDiscoveryClient
或@EnableEurekaClient
可省略。只需加上相关依赖,并进行相应配置,即可将微服务注册到服务发现组件上。@EnableDiscoveryClient和@EnableEurekaClient:
- 共同点:都是能够让注册中心能够发现,扫描到改服务。
- 不同点:
@
EnableEurekaClient只适用于Eureka作为注册中心,@EnableDiscoveryClient
可以是其他注册中心。
使用:
- 可对外提供接口,查询 已注册的服务等相关的信息。
- 入口主类添加注解 @EnableDiscoveryClient
@Resource
private DiscoveryClient discoveryClient;
@GetMapping(value = "/payment/discovery")
public Object discovery() {
List<String> services = discoveryClient.getServices();
for (String element : services) {
log.info("*****element: " + element);
}
List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
for (ServiceInstance instance : instances) {
log.info(instance.getServiceId() + "\t" + instance.getHost() + "\t" + instance.getPort() + "\t" + instance.getUri());
}
return this.discoveryClient;
注册中心 Eureka 、Zookeeper、Consul 的区别:
- Nacos 支持AP 和 CP 模式可切换
2.服务的调用与负载均衡:
Ribbon:
主要作用:负载均衡 + RestTemplate调用
负载均衡设置:
配置方式一:配置类方式
配置方式二:配置文件
配置方式三:自定义实现
OpenFeign:
3.服务的熔断和降级:
4.服务网关:
5.