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进行了一次查询,说明负载均衡成功

posted @ 2022-08-14 17:34  长情c  阅读(50)  评论(0)    收藏  举报