Eureka服务发现
现在有四个服务,其中包括订单服务,用户服务集群(UserApplication和UserApplication2)和eureka服务

其中访问order表会返回订单相关信息和通过userId获取的用户信息


那我们知道现在是微服务,各服务之间我是不知道对方的存在的,那么也就是我怎么通过userId去查询用户服务中的数据库中的user表呢?这里就不得不说下远程调用了。既然我们能通过各自的接口去访问得到相应的数据,那么我们可以把用户服务当做服务提供者,订单服务当做消费者,用户服务提供接口给其它微服务,订单接口去调用服务提供的接口。
远程调用
我们可以通过在订单服务中发送http请求去访问其他服务的接口,然后把用户服务接口中的信息封装到订单服务即可,发送http可以通过RestTemplate实现。
注册RestTemplate
首先,我们在order-service服务中的OrderApplication启动类中,注册RestTemplate实例:
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
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);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}

这样订单服务就有了用户的信息,这就是远程调用。
服务发现
也叫服务的拉取,服务拉取是基于服务名称获取服务列表,然后在对服务列表做负载均衡。

上面也说了订单服务是基于用户服务提供的接口,才能查询到用户服务中的用户信息封装到订单服务,所以现在我们可以在order-service中完成服务拉取。
服务拉取要做的两步:
1.修改http的访问路径用服务名代替ip、端口
改变前:

改变后:

2.负载均衡
最后,我们要去eureka-server中拉取user-service服务的实例列表,并且实现负载均衡。
在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容器
* @return
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
现在对订单服务发起两次请求,测试是否用户服务集群的两个服务是否都收到一次请求。


用户集群中的UserApplication和UserApplication2可以看到分别进行了参数为1和参数为2的id进行了一次查询,说明负载均衡成功


浙公网安备 33010602011771号