天天看點

通過restTemplate實作Spring cloud微服務的調用

在上一篇文章Eureka服務注冊發現執行個體中,我們示範了微服務的注冊與發現,在此基礎上,這篇文章我們示範通過restTemplate來實作對springcloud微服務的調用。

1用spring boot建立一個消費者工程,引入eureka依賴

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
   <version>2.1.0.RELEASE</version>
</dependency>
           

2修改配置檔案

#微服務端口
server.port=2200
#微服務應用名
spring.application.name=consumer
#表示表示是否從EurekaServer擷取注冊資訊,預設為true
eureka.client.fetch-registry=true
eureka.client.service-url.defaultZone=http://localhost:8260/eureka/
           

3修改啟動檔案

修改啟動檔案ConsumerApplication.java,引入注解@EnableDiscoveryClient,建立一個restTemplate Bean,注意添加@LoadBalanced這個注解,否則調用的時候報java.net.UnknownHostException:,代碼如下:

package com.yuxiaolong;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

@EnableDiscoveryClient
@SpringBootApplication
public class ConsumerApplication {

   @Bean(value = "restTemplate")
   @LoadBalanced
   RestTemplate restTemplate(){
      return  new RestTemplate();
   }
   public static void main(String[] args) {
      SpringApplication.run(ConsumerApplication.class, args);
   }

}
           

4寫一個controller類調用服務端方法

在controller類中調用wojia服務端中的微服務,代碼如下:

package com.yuxiaolong.controller;

import com.yuxiaolong.model.ModuleDO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.Arrays;
import java.util.List;

/**
 * Created by yuxl on 2019/3/1.
 */
@RestController
@RequestMapping(value = "/module")
public class ModuleController {
   @Autowired
   private RestTemplate restTemplate;
   @RequestMapping(value = "/list")
   public List<ModuleDO> listModules(){
      ModuleDO[] moduleDOS = this.restTemplate.getForObject("http://wojia/module/list",ModuleDO[].class);
      return Arrays.asList(moduleDOS);
   }
}
           

5啟動服務,請求接口

依次啟動上一篇文章Eureka服務注冊發現執行個體中提到的Eureka注冊中心和微服務提供者wojia,再啟動本文中的消費者服務consumer,在浏覽器中輸入請求http://localhost:2200/module/list,傳回結果如下:

通過restTemplate實作Spring cloud微服務的調用

微信掃下面二維碼添加公衆号議碼評川,可擷取java web、大資料、人工智能等相關學習資料。

通過restTemplate實作Spring cloud微服務的調用

繼續閱讀