Consul基本服务调用
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 运行模式图
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!"字符串
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 David
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果