在上一篇中实现将消费端注册进nacos并且通过ribbon实现了负载均衡。这篇来学习一下使用openfeign实现相同的功能。
在上一篇的基础上修改代码
pom文件新增:
<!--SpringCloud openfeign -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
配置文件:
server:
port: 84
spring:
application:
name: nacos-order-consumer
cloud:
nacos:
discovery:
server-addr: localhost:8848
#消费者将要去访问的微服务名称(注册成功进nacos的微服务提供者)
service-url:
nacos-user-service: http://nacos-payment-provider
# 激活Sentinel对Feign的支持
feign:
sentinel:
enabled: true
著启动类:在以前的基础上多加了一个@EnableFeignClients注解用来提供对openfeign的支持
@EnableDiscoveryClient
@SpringBootApplication
@EnableFeignClients
public class OrderNacosMain84 {
public static void main(String[] args) {
SpringApplication.run(OrderNacosMain84.class, args);
}
}
创建一个controller,service接口类
其中nacos-payment-provider指的是微服务的名称
需要注意的是:在service接口中方法的书写,我一般都是直接去客户端的代码中复制过来,然后修改成一个抽象方法并把
@GetMapping(value = "/payment/nacos/{id}")这个注解带上即可。
@Component
@FeignClient(name = "nacos-payment-provider")
public interface PaymentService {
@GetMapping(value = "/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id);
}
@RestController
@Slf4j
public class OrderNacosController {
@Resource
private RestTemplate restTemplate;
@Resource
private PaymentService paymentService;
//openfeign
@GetMapping(value = "/payment/nacos/{id}")
public String getPayment(@PathVariable("id") Integer id){
return paymentService.getPayment(id);
}
//也可以将这个地址写在类中
@Value("${service-url.nacos-user-service}")
private String serverURL;
@GetMapping(value = "/consumer/payment/nacos/{id}")
public String paymentInfo(@PathVariable("id") Long id) {
return restTemplate.getForObject(serverURL+"/payment/nacos/"+id,String.class);
}
}
本文介绍如何在Spring Cloud项目中使用OpenFeign替代Ribbon实现服务间调用的负载均衡,包括添加依赖、配置文件调整、启动类注解及创建Feign客户端的详细步骤。
1762

被折叠的 条评论
为什么被折叠?



