一、Eureka服务注册
1.服务注册中心项目
(1)pom.xml添加依赖
<!--eureka-server服务端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
(2)application.yml配置文件
server:
port: 7001
eureka:
instance:
hostname: localhost #eureka服务端的实例名称
client:
register-with-eureka: false #false表示不向注册中心注册自己。
fetch-registry: false #false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
service-url:
defaultZone: http://localhost:7001/eureka/ #设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址,当需要Eureka集群时,地址之间用“,”隔开。
(3)主启动类上添加注解
@EnableEurekaServer//接受其他微服务注册进来
2.提供者项目
(1)pom.xml中添加依赖
<!-- 将微服务provider侧注册进eureka -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
(2)application.yml配置文件
server:
port: 8001
mybatis:
config-location: classpath:mybatis/mybatis.cfg.xml #mybatis所在路径
type-aliases-package: com.offcn.springcloud.entities #entity别名类
mapper-locations:
- classpath:mybatis/mapper/**/*.xml #mapper映射文件
spring:
application:
name: microservicecloud-dept #自定义主机名
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.gjt.mm.mysql.Driver
url: jdbc:mysql://localhost:3306/cloudDB01
username: root
password: root
dbcp2:
min-idle: 5
initial-size: 5
max-total: 5
max-wait-millis: 200
eureka:
client: #客户端注册进eureka服务列表内,当Eureka为集群时,访问地址之间用“,”隔开
service-url:
defaultZone: http://localhost:7001/eureka
instance:
instance-id: msc_eureka_dept_provider_8001
prefer-ip-address: true #访问路径可以显示IP地址
(3)在主启动类上添加注解
@EnableEurekaClient//本服务启动后会自动注册进eureka服务器中
3.点击服务名称出现错误页面时
(1)在提供者项目中添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
(2)在父项目中添加脚本
<build>
<finalName>microservicecloud</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<delimiters>
<delimit>$</delimit>
</delimiters>
</configuration>
</plugin>
</plugins>
</build>
二、服务发现,让消费者客户端发现和查询有eureka server上注册了那些服务
1.在提供者客户端的控制器中注入 DiscoveryClient对象:
@Autowired
private DiscoveryClient client;
2.在消费者客户端的控制器中添加发现服务的请求接口
@RequestMapping(value = "/dept/discovery", method = RequestMethod.GET)
public Object discovery()
{ //获取服务名称
List<String> list = client.getServices();
System.out.println("**********" + list);
//获取指定的服务实例对象,包括id(getServiceId()),主机(getHost()),端口(getPort()),uri(getUri())
List<ServiceInstance> srvList = client.getInstances("microservicecloud-dept");
for (ServiceInstance element : srvList) {
System.out.println(element.getServiceId() + "\t" + element.getHost() + "\t" + element.getPort() + "\t"
+ element.getUri());
}
return this.client;
}
3.在提供者客户端的启动类上添加注解
@EnableDiscoveryClient //服务发现
4.在消费者客户端的控制器中添加访问服务发现接口功能
三、Ribbon负载均衡
1.在消费者客户端pom.xml添加依赖
<!-- Ribbon相关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
2.在消费者的RestTemplate类上添加注解
@LoadBalanced //在消费者客户端实现负载均衡
3.在消费者的主启动类上添加注解
@EnableEurekaClient
4.修改控制器上的访问路径
private static final String REST_URL_PREFIX = "http://MICROSERVICECLOUD-DEPT";
四、修改Ribbon负载均衡算法
1.创建配置类(不能在@Component扫描的包下)
@SpringBootConfiguration
public class RibbonConfig {
@Bean
public IRule getRule(){
return new RandomRule();//指定负载均衡算法
}
}
2.在消费者客户端添加注解
@RibbonClient(name="MICROSERVICECLOUD-DEPT",configuration=MySelfRule.class)
五、Feign,封装RestTemplate和Ribbon
1.在消费者客户端添加pom依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
2.在消费者客户端的application.yml
server:
port: 10002
feign:
hystrix:
enabled: true
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
3.api的pom.xml添加依赖
<!--feign-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
4.api中新建业务层接口
//在接口上添加注解
@FeignClient(value = "")
接口中的方法即为提供者的控制器中的方法抽象化
5.将api的业务层接口注入到消费者的控制器中
6.在主启动类上添加注解
@EnableFeignClients
7.配置类中定义负载均衡算法
8.配置类中定义负载均衡配置类
@SpringBootConfiguration
public class RibbonConfig {
@Bean
public IRule getRule(){
//return new RandomRule();指定负载均衡算法
return new RandomRule_Five();
}
}
9.在消费者主启动类上添加注解
@RibbonClient(name="MICROSERVICECLOUD-DEPT",configuration=RibbonConfig.class)
六、Hystrix
1.服务熔断(在提供者上)
(1)pom.xml
<!-- hystrix -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
(2)在控制器的方法上添加注解@HystrixCommand(fallbackMethod)
(3)定义熔断后的方法
(4)在主启动类上添加注解@EnableCricuitBreaker
2.服务降级(消费者上)
(1)在feign 9001项目添加工厂类,该工厂类中的方法是在,服务降级之后备选回调,实现FallbackFactory接口,重写create方法
(2)修改接口注解,指定降级服务后,备选回调的工厂类
@FeignClient(value = "MICROSERVICECLOUD-DEPT",fallbackFactory = DeptClientServiceFallbackFactory.class)
(3)修改application.yml文件
server:
port: 10002
feign:
hystrix:
enabled: true #启用hystrix
eureka:
client:
register-with-eureka: false
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/