微服务原理
将原本单独的整体项目进行解耦,正常项目是可以直接调用其他服务的service的,一个controller多个service,微服务将之分开,以user和order为例,分开后,不再可以进行直接的调用,不过分开之后仍然可以用url进行访问调用,此处先以原始调用为起始
服务内容概览
user
通过id获取用户
order‘
user类是对应的
获取订单信息,这里需要调用到user的数据库,因为order里面有user对象,但是微服务数据库是相互独立的,所以不能通过直接注入userservice的方式,但是服务本身是通过url获取的,这里转而使用url的方式获取数据再赋值。
服务间调用
第一步,application中添加bean,RestTemplate
第二步,修改service
@Service
public class OrderService {
@Autowired
private OrderMapper orderMapper;
@Autowired
private RestTemplate restTemplate;
public Order queryOrderById(Long orderId) {
// 1.查询订单
Order order = orderMapper.findById(orderId);
//利用restTemplate获取对应参数的url并返回信息,
//通过user,class把信息以类的形式返回,这样就把结果转变成类传回
String url="http://localhost:8081/user/"+order.getUserId();
User user =restTemplate.getForObject(url,User.class);
order.setUser(user);
// 4.返回
return order;
}
}
Eureka 服务发现
当前的服务是通过url进行的调用,但是有了eureka之后,直接用服务名称即可
1,替换服务名
2、添加负载均衡注解@LoadBanlanced
给resttemplate添加注解
验证
重启后访问,一次101,一次102
可见负载均衡已经配置成功
不需要关心地址,由eureka去完成负载均衡,只需要写名称就行了