1. 程式人生 > 其它 >Spring Cloud Alibaba 使用restTemplate進行服務呼叫

Spring Cloud Alibaba 使用restTemplate進行服務呼叫

Spring Cloud Alibaba 服務呼叫負載均衡

在前面的學習我們成功的實現了服務註冊和服務發現 現在我們需要實現服務呼叫

編寫服務介面

在生產者編寫一個簡單的介面功能 這裡我們實現一個返回埠的介面

@RestController
public class ProviderController {
    @Value("${server.port}")
    private String port;
    @GetMapping("/getPort")
    public String getPort(){
        return this.port;
    }
}

分別執行埠為8081 8082的兩個服務
在nacos檢視

在消費者呼叫服務功能

呼叫功能我們通過resttemplate來實現
要想使用該類需要我們去編寫配置類

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

編寫消費者類

package com.jie.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.List;
import java.util.concurrent.ThreadLocalRandom;

@RestController
public class ConsumerController {
    //通過discoveryClient連線nacos
    @Autowired
    private DiscoveryClient discoveryClient;
    @Autowired
    private RestTemplate restTemplate;
    @GetMapping("/instances")
    public List<ServiceInstance> instances(){
        List<ServiceInstance> instances = this.discoveryClient.getInstances("provider");
        return instances;
    }
    @GetMapping("/getPort")
    public String getPort(){
        //獲取例項集合
        List<ServiceInstance> list = this.discoveryClient.getInstances("provider");
        //我們隨機拿取其中的一個例項
        int index = ThreadLocalRandom.current().nextInt(list.size());
        ServiceInstance instance = list.get(index);
        //主機名加埠即為URI 如localhost:8080 加上/getPort 就是完整路徑url
        String url = instance.getUri() + "/getPort";
        //呼叫 第二個引數為呼叫介面的返回型別
        return "呼叫了 "+restTemplate.getForObject(url,String.class);
    }
}

訪問消費者介面 多次訪問可以出現兩個生產者服務都被消費的結果