创建聚合父工程
11
11
org.springframework.boot
spring-boot-dependencies
2.7.2-SNAPSHOT
org.springframework.cloud
spring-cloud-dependencies
2021.0.3
pom
import
创建子工程——服务注册中心server1
org.springframework.cloud spring-cloud-starter-netflix-eureka-server3.1.3 org.springframework.boot spring-boot-starter-web
配置文件
spring:
application:
name: server1
server:
port: 8080
eureka:
instance:
hostname: localhost
client:
registerWithEureka: false
fetchRegistry: false
serviceUrl:
defaultZone: http://127.0.0.1:${server.port}/eureka/
启动类
@SpringBootApplication
@EnableEurekaServer
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
二、搭建环境——服务的提供者
1、添加依赖
sk-springcloud com.buba 1.0-SNAPSHOT 4.0.0 client1 11 11 org.springframework.cloud spring-cloud-starter-netflix-eureka-client3.1.3 org.springframework.boot spring-boot-starter-web
2、配置文件
spring: application: name: client1 datasource: druid: username: root password: 123456 url: jdbc:mysql://127.0.0.1:3306/mydb?serverTimezone=Asia/Shanghai driver-class-name: com.mysql.cj.jdbc.Driver server: port: 7001 eureka: client: serviceUrl: defaultZone: http://127.0.0.1:8080/eureka/ mybatis: mapper-locations: classpath:mappers/*.xml
3、启动类
@SpringBootApplication
//@EnableEurekaClient
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
4、集成spring+mybatis+mysql
mysql mysql-connector-java8.0.29 com.alibaba druid-spring-boot-starter1.2.8 com.buba Common1.0-SNAPSHOT org.mybatis.spring.boot mybatis-spring-boot-starter2.2.2
5、配置文件
mybatis:
mapper-locations: classpath:mappers/*.xml
spring:
datasource:
druid:
username: root
password: 123456
url: jdbc:mysql://127.0.0.1:3306/mydb?serverTimezone=Asia/Shanghai
driver-class-name: com.mysql.cj.jdbc.Driver
6、写逻辑
resources/mappers
mappers
service
controller
集成工共模块 common
三、微服务之间调用1、单点调用及其原理
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
@GetMapping("/findUserById")
public ResponseEntity findUserById(){
List list = discoveryClient.getInstances("client1");
if(list.isEmpty()){
return null;
}
ServiceInstance instanceInfo = list.get(0);
String instanceId = instanceInfo.getInstanceId();
String url = instanceId+"/user/selectUserById?id=2";
ResponseEntity reps = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity(null,null), new ParameterizedTypeReference() {
});
return reps;
}
2、负载均衡调用
方式1:
@GetMapping("/findUserById2")
public ResponseEntity findUserById2(){
ServiceInstance serviceInstance = loadBalanced.choose("client1");
String instanceId = serviceInstance.getInstanceId();
String url = instanceId+"/user/selectUserById?id=2";
ResponseEntity reps = restTemplate.exchange(url, HttpMethod.GET, new HttpEntity(null,null), new ParameterizedTypeReference() {
});
return reps;
}
方式2:
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
@GetMapping("/findUserById3")
public ResponseEntity findUserById3(){
ResponseEntity reps = restTemplate.exchange("http://client1/user/selectUserById?id=2", HttpMethod.GET, new HttpEntity(null,null), new ParameterizedTypeReference() {
});
return reps;
}
四、服务注册中心的配置详解
| 配置项 | 默认状态 | 作用 |
|---|---|---|
| eureka.server.enable-self-preservation | false | 关闭注册中心的保护机制,Eureka 会统计15分钟之内心跳失败的比例低于85%将会触发保护机制,不剔除服务提供者,如果关闭服务注册中心将不可用的实例正确剔除 |
| eureka.server.eviction-interval-timer-in-ms | 60000 | # Eureka服务器清理无效节点的时间间隔,单位:毫秒,缺省:60000,即60秒 |
| 配置项 | 默认状态 | 作用 |
|---|---|---|
| eureka.instance.prefer-ip-address | false | 使用使用IP地址的形式来定义注册中心的地址 |
| eureka.client.register-with-eureka | true | 启动服务注册 |
| eureka.client.eureka-server-connect-timeout-seconds | 5 | 连接 Eureka Server 的超时时间,单位:秒 |
| eureka.client.eureka-server-read-timeout-seconds | 8 | 读取 Eureka Server 信息的超时时间,单位:秒 |
| eureka.client.filter-only-up-instances | true | 获取实例时是否过滤,只保留UP状态的实例 |
| eureka.instance.ip-address | IP地址 | |
| eureka.instance.hostname | 设置当前实例的主机名称 | |
| eureka.instance.appname | 服务名,默认取 spring.application.name 配置值,如果没有则为 unknown | |
| eureka.instance.lease-renewal-interval-in-seconds | 30 | 定义服务续约任务(心跳)的调用间隔,单位:秒 |
| eureka.instance.lease-expiration-duration-in-seconds | 90 | 定义服务失效的时间,单位:秒 |
| eureka.client.service-url. | 指定服务注册中心地址,类型为 HashMap,并设置有一组默认值,默认的Key为 defaultZone;默认的Value为 http://localhost:8761/eureka ,如果服务注册中心为高可用集群时,多个注册中心地址以逗号分隔。 如果服务注册中心加入了安全验证,这里配置的地址格式为: http://username:password@localhost:8761/eureka 其中 | |
| eureka.client.fetch-registery | true | 检索服务 |
| eureka.client.registery-fetch-interval-seconds | 30 | 客户端拉取服务注册信息间隔,单位:秒,缺省:30 |
| eureka.client.health-check.enabled = true | # 是否启用客户端健康检查 | |
| eureka.client.eureka-server-read-timeout-seconds = 8 | # 从Eureka服务器读取信息的超时时间,单位:秒,缺省:8 |



