微服务框架
【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】
SpringCloud微服务架构
文章目录
- 微服务框架
- SpringCloud微服务架构
- 3 Eureka
- 3.5 服务发现
- 3.5.1 在order-service完成服务拉取
- 3.5.2 总结
3 Eureka
3.5 服务发现
3.5.1 在order-service完成服务拉取
之前我们已经完成 了服务的注册
且eureka 管理界面可以查看到服务列表
现在就要做服务的发现【拉取】
服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡
① 修改OrderService的代码,修改访问的url路径,用服务名代替ip、端口:
package cn.itcast.order.service;
import cn.itcast.order.mapper.OrderMapper;
import cn.itcast.order.pojo.Order;
import cn.itcast.order.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.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请求查询用户
//2.1 URL路径
String url = "http://userservice/user/" + order.getUserId();
//2.2 发送HTTP请求,实现远程调用
User user = restTemplate.getForObject(url, User.class);
//3. 封装user到order
order.setUser(user);
// 4.返回
return order;
}
}
② 在order-service项目的启动类OrderApplication中的RestTemplate添加负载均衡注解:
package cn.itcast.order;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@MapperScan("cn.itcast.order.mapper")
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
//创建RestTemplate并注入Spring容器
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
其实现在代码已经完成 了
重启order 服务
现在直接调order 服务,看看它到底调的user 1 还是user 2
第一次,
第二次
OK,查看日志
user 1
user2
这就实现了负载均衡,而且我们这次根本没有直接写到用哪个服务,只是写了服务名称
OK,这就是服务的发现【拉取】
3.5.2 总结
-
搭建EurekaServer
- 引入eureka-server依赖
- 添加@EnableEurekaServer注解
- 在application.yml中配置eureka地址
-
服务注册
- 引入eureka-client依赖
- 在application.yml中配置eureka地址
-
服务发现
- 引入eureka-client依赖
- 在application.yml中配置eureka地址
- 给RestTemplate添加@LoadBalanced注解
- 用服务提供者的服务名称远程调用