创建聚合父工程
11 11 org.springframework.boot spring-boot-dependencies2.7.2-SNAPSHOT org.springframework.cloud spring-cloud-dependencies2021.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 ResponseEntityfindUserById(){ 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 ResponseEntityfindUserById2(){ 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 ResponseEntityfindUserById3(){ 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 |