【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】
之前我们已经完成 了服务的注册

且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 {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate 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到orderorder.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@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}}

其实现在代码已经完成 了
重启order 服务

现在直接调order 服务,看看它到底调的user 1 还是user 2

第一次,

第二次
OK,查看日志
user 1

user2

这就实现了负载均衡,而且我们这次根本没有直接写到用哪个服务,只是写了服务名称

OK,这就是服务的发现【拉取】
搭建EurekaServer
服务注册
服务发现