通过RestTemple实现远程调用
实现前:
查询的用户为空
实现后:
定义一个Bean
//创建RestTempl
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
修改查询订单的方法
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
//2.利用RestTemplate发起http请求,查询用户
String url="http://localhost:8081/user/"+ order.getUserId();
User user = restTemplate.getForObject(url, User.class);
//3.封装User到Order
order.setUser(user);
// 4.返回
return order;
}
}
服务提供者:一次业务中,被其他微服务调用的服务
服务消费者:一次业务中,调用其他微服务的服务
一个服务既可以是提供者也可以是消费者
在Eureka架构中,微服务角色有两类:
EurekaServer:服务端,注册中心
记录服务信息
心跳监控
EurekaClient:客户端:
provider:服务提供者
记录服务信息
心跳监控
consumer:服务消费者
根据服务名称从EurekaServer拉取服务列表
基于服务列表做负载均衡,选中一个微服务后发起远程调用
1.创建项目,引入spring-cloud-starter-netflix-eureka-server的依赖
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
2.编写启动类
@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaApplication.class,args);
}
}
3.配置文件
server:
port: 10086 #服务端口
spring:
application:
name: eurekaserver #eureka的服务名称
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka/
打开Eureka
搭建完成
1.在user-service项目中引入依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
2.配置eureka地址
spring:
application:
name: usereureka #eureka的服务名称
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:10086/eureka/
3.在order-service中做同样的操作
回到注册中心查看:注册成功
在order-service完成服务拉取
1.修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口
String url="http://userserver/user/"+ order.getUserId();
2.在order-service项目中的启动类OrderApplication中的RestTemplate添加负载均衡注解:
@LoadBalanced
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
可以复制一个userappllication
测试负载均衡(默认是轮询)
改变负载均衡的规则
1.代码方式(所有的服务)
@Bean
public IRule randmoRule(){
return new RandomRule();//设置为随机
}
2.配置文件方式(只针对某个服务)
在orderservice的配置文件中
userservice: #服务名
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则
Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间很长。而饥饿加载则会在项目启动时创建,降低第一次访问的耗时,通过下面的配置开启饥饿加载
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #负载均衡规则
#设置饥饿加载
ribbon:
eager-load:
enabled: true
clients:
- userservice