Consul基本的服务调用

前置知识:Consul服务与注册,Spring Cloud Consul ,并且Consul成功注册了你的Spring服务

1. RestTemplate使用

在微服务架构中,RestTemplate 是一个重要的工具,主要用于服务之间的通信。它简化了与 RESTful 服务进行交互的过程,具体来说,它在以下几个方面发挥着重要作用:

1. 服务间通信的简化

RestTemplate 提供了一系列便捷的方法,用于发出 HTTP 请求和处理响应。它支持多种 HTTP 方法,如 GET、POST、PUT、DELETE 等,并且能够方便地处理请求和响应的序列化和反序列化。

2. 负载均衡

结合 Spring Cloud 生态系统中的其他组件(如 @LoadBalanced 注解和 Netflix Ribbon),RestTemplate 可以实现客户端负载均衡。通过在 RestTemplate Bean 上加上 @LoadBalanced 注解,可以让 RestTemplate 在请求时自动选择一个健康的服务实例,从而实现负载均衡。

4. 服务发现

RestTemplate 可以与 Spring Cloud Consul 等服务注册与发现组件集成。通过这种方式,RestTemplate 可以使用服务名称而不是具体的 URL 来访问其他服务。服务名称会被解析成一个服务实例的列表,负载均衡器会选择其中一个实例来发出请求。

5. 简化测试

由于 RestTemplate 的接口设计,测试服务间通信变得相对简单。

6.Spring Cloud Consul 运行模式图

imags

7. RestTemplateConfig编写

import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {
    @Bean
    @LoadBalanced//负载均衡
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

8. RestController编写

import com.cluod.commons.resp.ResultData;
import com.cluod.order.entities.PayDTO;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

@Slf4j
@RestController
public class  RestController {

    @Resource
    private RestTemplate restTemplate;

    public static final String RestNext_URL = "http://cloud-payment-service";//服务注册中心上的微服务名称

    @GetMapping("rest/")
    public String restTest() {
        return restTemplate.getForObject(RestNext_URL + "/rest/test", String.class);
    }

}
  • RestNext_URL: http://+你的consul注册的服务的名称

编写微服务提供者

省略启动类以及先关配置文件

1.RestNextController编写

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PayController {
    @GetMapping("/rest/test")
    public String restNextTest() {
        return "Consul and RestTemplate test success!";
    }
}

测试Consul的服务调用

自行测试:测试结果应该是会获获取到"Consul and RestTemplate test success!"字符串