远程调用-声明式实现

This commit is contained in:
bunny 2025-05-26 17:44:53 +08:00
parent 041b8c0218
commit 42d21d0947
5 changed files with 26 additions and 4 deletions

View File

@ -70,11 +70,11 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId> <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.springframework.cloud</groupId> <groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId> <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency> </dependency>
<!-- knife4j --> <!-- knife4j -->

View File

@ -8,6 +8,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import java.util.concurrent.Executor; import java.util.concurrent.Executor;
@ -16,6 +17,7 @@ import java.util.concurrent.Executors;
@SpringBootApplication @SpringBootApplication
@EnableDiscoveryClient @EnableDiscoveryClient
@RefreshScope @RefreshScope
@EnableFeignClients
public class OrderServiceApplication { public class OrderServiceApplication {
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args); SpringApplication.run(OrderServiceApplication.class, args);

View File

@ -0,0 +1,17 @@
package cn.bunny.service.feign;
import cn.bunny.model.product.bean.Product;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
// Feign 客户端
@FeignClient(value = "service-product", path = "/api/product")
public interface ProductFeignClient {
// 标注在 Controller 上是接受请求
// 标注在 FeignClient 时发送请求
@GetMapping("{id}")
Product getProduct(@PathVariable("id") Long productId);
}

View File

@ -2,6 +2,7 @@ package cn.bunny.service.service.impl;
import cn.bunny.model.order.bean.Order; import cn.bunny.model.order.bean.Order;
import cn.bunny.model.product.bean.Product; import cn.bunny.model.product.bean.Product;
import cn.bunny.service.feign.ProductFeignClient;
import cn.bunny.service.service.OrderService; import cn.bunny.service.service.OrderService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -22,6 +23,7 @@ public class OrderServiceImpl implements OrderService {
private final DiscoveryClient discoveryClient; private final DiscoveryClient discoveryClient;
private final RestTemplate restTemplate; private final RestTemplate restTemplate;
private final LoadBalancerClient loadBalancerClient; private final LoadBalancerClient loadBalancerClient;
private final ProductFeignClient productFeignClient;
/** /**
* 创建订单信息 * 创建订单信息
@ -32,7 +34,8 @@ public class OrderServiceImpl implements OrderService {
*/ */
@Override @Override
public Order createOrder(Long productId, Long userId) { public Order createOrder(Long productId, Long userId) {
Product product = getProductFromRemoteWithLoadBalancerAnnotation(productId); // Product product = getProductFromRemoteWithLoadBalancerAnnotation(productId);
Product product = productFeignClient.getProduct(productId);
Order order = new Order(); Order order = new Order();
order.setId(1L); order.setId(1L);

View File

@ -5,7 +5,7 @@ spring:
application: application:
name: service-order name: service-order
profiles: profiles:
active: prod active: dev
cloud: cloud:
nacos: nacos:
server-addr: 192.168.95.135:8848 server-addr: 192.168.95.135:8848