springcloud使用restTemplate进行服务调用

在springcloud的体系中,微服务之间的互相调用是其中比较重要的模块之一,也是微服务的rpc主要核心板块,我们熟知的用于微服务互相调用的组件像ribbon和feign便是其中之一,但在谈到这两个组件之前,我想先使用一下restTemplate,即springboot的web模块提供的一款内置的http通信组件,

接着之前的demo,我们再创建一个微服务的模块,作为consumer端,使用restTemplate调用上一篇provider中的接口,

pom依赖基本相同,配置文件略有差异,直接贴上代码,


server.port=8102

#挂载到eureka注册中心中的服务名称,以便被其他的消费者发现与引用
spring.application.name=consumer1

#注册中心名字
eureka.client.service-url.defaultZone=http://localhost:8100/eureka

### 需要将自己的服务注册到eureka上
eureka.client.register-with-eureka=true

####需要检索服务
eureka.client.fetch-registry=true

创建一个测试使用的controller,

@RestController
public class ConsumerController {

    // RestTemplate 是有SpringBoot Web组件提供 默认整合ribbon负载均衡器
    // rest方式底层是采用httpclient技术
    @Autowired
    private RestTemplate restTemplate;

    /**
     * 在SpringCloud 中有两种方式调用 rest、fegin(SpringCloud)
     * @return
     */

    @RequestMapping("/getFromProvider")
    public String getFromProvider() {
        // 有两种方式,一种是采用服务别名方式调用,另一种是直接调用 使用别名去注册中心上获取对应的服务调用地址
        String url = "http://PROVIDER1/getServerPort";
        String result = restTemplate.getForObject("http://localhost:8101/getServerPort", String.class);
        System.out.println("restTemplate 调用 服务提供者服务 :" + result);
        return result;
    }

}

创建启动类,由于restTemplate是被注入的,因此这里需要在项目启动的时候价值啊bean,

@SpringBootApplication
@EnableEurekaClient
public class Consumer1App {

    public static void main(String[] args) {
        SpringApplication.run(Consumer1App.class,args);
    }

    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

}

第一种方式,直接使用http的形式进行调用,即拼接url,这里要调用provider中的getServerPort接口,这里拼接的完整路径是:http://localhost:8101/getServerPort,

项目启动后,访问地址,http://localhost:8102/getFromProvider,结果如下,说明通过restTemplate拼接url的方式可以成功调取服务接口,
springcloud使用restTemplate进行服务调用_第1张图片
但是如果我们还想使用restTemplate的方式以服务名称的方式调用provider的服务要怎们做呢?需要在restTemplate的bean的注解上稍微修改,如下,

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

加上 @LoadBalanced注解后,就可以直接通过微服务的服务名的方式进行远程服务调用了,我们继续访问上述接口,可以看到已经成功获取到provider的接口返回值,
springcloud使用restTemplate进行服务调用_第2张图片

同时可以看到它同样作为一个eureka服务客户端注册到eureka注册中心里面去了,
在这里插入图片描述

本篇到这里就结束了,最后,感谢观看!

需要源码的伙伴可以前往下载:https://download.csdn.net/download/zhangcongyi420/11475388

你可能感兴趣的:(springcloud)