「SpringCloudAlibabaマイクロサービスアーキテクチャ」トピック(3)-SpringCloudAlibabaサービスコールのRestTemplateメソッド

1はじめに

nacos第二世代のマイクロサービスSpringCloudAlibaba配信センタとレジストリコンポーネントに分配収入、その機能は、マイクロサービスの第一世代であるSpringCloudEurekaConfig組み合わせ。要するに、ナコスを達成することができます分布式服务注册与发现し、分布式配置中央の機能。

Nacos公式ドキュメント:https//nacos.io/zh-cn/docs/what-is-nacos.html

2.Nacos-discoveryはデフォルトでリボン負荷分散をサポートします

好奇心を保つために、SpringCloudの一般的なレジストリコンポーネントEurekaConsulnacosなど)がすべて統合され、デフォルトのRibbon負荷分散を開くことを特に分析しますこのセクションはnacosテーマであり、nacosサービス検出コンポーネントの下で分析します。また、デフォルトで統合されており、リボンの負荷分散をサポートしています。
ここに画像の説明を挿入します

3.環境設定

3.1。製品はインターフェースを提供します

package com.bruce.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @BelongsProject: springcloud-alibaba-nacos
 * @BelongsPackage: com.bruce.controller
 * @CreateTime: 2021-02-18 13:37
 * @Description: 生产者——>商品服务
 */
@Slf4j
@RestController
public class ProductController {
    
    

    @Value("${server.port}")
    private String port;

    @GetMapping("/getProductMsg")
    public String getProductMsg() {
    
    
        log.info("开始调用商品服务信息啦");
        return "我是商品服务, 调用商品服务接口成功了===>> : " + port;
    }
}

3.2。消費財のインターフェースを注文する(3つの方法)

package com.bruce.controller;

/**
 * @BelongsProject: springcloud-alibaba-nacos
 * @BelongsPackage: com.bruce.controller
 * @CreateTime: 2021-02-18 13:47
 * @Description: TODO
 */

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

import java.util.List;

/**
 * @desc:  消费者——>订单服务
 * @author: cao_wencao
 * @date: 2020-04-17 20:58
 */
@Slf4j
@RestController
public class OrderController {
    
    

    @Autowired(required = false)
    private RestTemplate restTemplate;

    @Autowired
    private LoadBalancerClient loadBalancerClient;

    @Autowired
    private DiscoveryClient discoveryClient;

    //方式一 :通过IP地址
    @GetMapping("/getProductMsg")
    public String getProductMsg() {
    
    
        String url = "http://127.0.0.1:8715/getProductMsg";
        String response = restTemplate.getForObject(url, String.class);
        log.info("response==>: {}",response);
        return response;
    }

    //方式二 :通过服务名(这种方式不可行,在Eureka中可以)
    @GetMapping("/getProductMsg2")
    public String getProductMsg2() {
    
    
        String url = "http://nacos-product/getProductMsg";
        String response = restTemplate.getForObject(url, String.class);
        log.info("response==>: {}",response);
        return response;
    }

    //方式三 :通过LoadBalancerClient获取服务调用地址进行调用
    @GetMapping("/getProductMsg3")
    public String getProductMsg3() {
    
    
        //discoveryClient.getInstances()
        ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-product");
        String url = String.format("http://%s:%s", serviceInstance.getHost(), serviceInstance.getPort() + "/getProductMsg");
        String response = restTemplate.getForObject(url, String.class);
        log.info("response结果==>>>: {}", response);
        return response;
    }

    //方式四 :通过LoadBalancerClient获取服务调用地址进行调用
    @GetMapping("/getProductMsg4")
    public String getProductMsg4() {
    
    
        List<ServiceInstance> serviceInstanceList = discoveryClient.getInstances("nacos-product");
        //任意选择一个,实现本地RPC调用
        ServiceInstance serviceInstance = serviceInstanceList.get(0);
        String response = restTemplate.getForObject(serviceInstance.getUri()+ "/getProductMsg", String.class);
        log.info("response结果==>>>: {}", response);
        return response;
    }

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

}

4.RestTemplateに基づくテスト

nacosを登録センターとして使用する場合、サービス消費には2つのタイプがあります。1つはRestTemplateで、もう1つはFeignクライアントです。その中で、RestTemplateがサービス消費を実装する方法は3つあります。

プロジェクトを開始し、最初にnacosコンソールを観察して、サービスがすべて登録されていることを確認します
ここに画像の説明を挿入します

ここに画像の説明を挿入します

  • LoadBalancerClientを介してサービス呼び出しアドレスを取得して呼び出します:http://127.0.0.1:8710 / getProductMsg3

ここに画像の説明を挿入します

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/BruceLiu_code/article/details/113845258