创建父工程parent
注册中心 Eureka
单节点 创建子项目spring initiater ——》Eureka Server
启动类添加
@EnableEurekaServer
配置文件
添加认证security后需要在defaultUrl添加认证信息
server:
port: 8888
spring:
application:
name: eureka-server-center
# security:
# basic:
# enable:true
# user:
# name: root
# password: 842234092
eureka:
instance:
hostname: eureka-server
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://eureka-server:8888/eureka/
# server:
# enable-self-preservation: false
单节点启动
服务提供者 Eureka Client
创建子项目 spring initiater ——》Eureka Client
启动类添加注解
@EnableEurekaClient
@ComponentScan(basePackages = {"com.wxl"})
创建服务提供接口,Rest服务调用所以需要使用SpringMVC
@RestController
public class ProviderController {
@RequestMapping(value = "/learn" , method = RequestMethod.GET)
public String learnService(){
return "成功访问服务";
}
}
配置文件,当注册中心使用认证的话,需要在defaultZone添加认证信息
server:
port: 8081
spring:
application:
name: provider
eureka:
client:
service-url:
defaultZone: http://localhost:8888/eureka/
register-with-eureka: true
fetch-registry: true
重复以上操作,修改接口返回信息,提供两个相同服务,以便后面测试服务调用负载均衡
启动服务提供者
测试两个服务通信
服务消费者 Ribbon+RestTemplate 负载和远程调用
创建子项目 spring initiater ——》Eureka Client + Ribbon 因为服务消费者同时也能注册服务被消费
启动类添加
@EnableEurekaClient
@ComponentScan(basePackages = {"com.wxl"})
启动类中添加bean实例,以供自动注入
// 获取远程服务 的实例
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
创建消费者接口
其中url规则为http://服务名/服务提供者路由
@RestController
public class RibbonController {
@Autowired
RestTemplate restTemplate;
@GetMapping("/consumer")
public String getMsg() {
return restTemplate.getForObject("http://provider/learn", String.class);
}
}
配置文件,如果注册中心使用认证,defaultZone需要添加认证信息
spring:
application:
name: ribbon-consumer
server:
port: 8090
eureka:
client:
service-url:
defaultZone: http://localhost:8888/eureka/
register-with-eureka: false
fetch-registry: true
启动ribbon消费者,测试负载,连续请求接口,访问的是不同服务提供者
Ribbon 策略配置
配置文件配置:在消费者YML中胚子和服务名
provider:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
使用注解自定义类配置@RibbonClient
public class MyIRule {
@Bean
public IRule rule() {
return new RandomRule();
}
}
// 在消费者启动类上添加注解
// name是服务提供者名,configuration是我们配置的负载均衡策略
@RibbonClient(name="provider",configuration = MyIRule.class)
Hystrix 熔断
调用远程服务方法上加注解
@HystrixCommand(fallbackMethod = "fallBackMethod")
并且添加返回方法
// 参数和返回值要和原方法一致 public String fallBackMethod() { return "出错出错"; }
在启动类中添加注解
@EnableHystrix
关闭服务,测试