diff --git a/borrow-service/pom.xml b/borrow-service/pom.xml
index 074c854..0c8ffd8 100644
--- a/borrow-service/pom.xml
+++ b/borrow-service/pom.xml
@@ -18,6 +18,15 @@
UTF-8
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-hystrix
+ 2.2.10.RELEASE
+
+
+ org.springframework.cloud
+ spring-cloud-starter-openfeign
+
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
@@ -30,11 +39,6 @@
org.mybatis.spring.boot
mybatis-spring-boot-starter
-
- org.example
- commons
- 0.0.1-SNAPSHOT
-
org.example
commons
diff --git a/borrow-service/src/main/java/com/test/BorrowApplication.java b/borrow-service/src/main/java/com/test/BorrowApplication.java
index 52829ce..ea9095c 100644
--- a/borrow-service/src/main/java/com/test/BorrowApplication.java
+++ b/borrow-service/src/main/java/com/test/BorrowApplication.java
@@ -4,6 +4,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* ClassName: BorrowApplication
@@ -13,7 +14,7 @@ import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
* @Create 2023/8/14 16:25
*/
@SpringBootApplication
-@EnableEurekaClient
+@EnableFeignClients
public class BorrowApplication {
public static void main(String[] args) {
SpringApplication.run(BorrowApplication.class, args);
diff --git a/borrow-service/src/main/java/com/test/config/BeanConfig.java b/borrow-service/src/main/java/com/test/config/BeanConfig.java
deleted file mode 100644
index e891e37..0000000
--- a/borrow-service/src/main/java/com/test/config/BeanConfig.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.test.config;
-
-import org.springframework.cloud.client.loadbalancer.LoadBalanced;
-import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.client.RestTemplate;
-
-/**
- * ClassName: BeanConfiguration
- * Package: com.test.config
- *
- * @author yovinchen
- * @Create 2023/8/15 10:08
- */
-@Configuration
-@LoadBalancerClient(value = "userservice", //指定为 userservice 服务,只要是调用此服务都会使用我们指定的策略
- configuration = LoadBalancerConfig.class) //指定我们刚刚定义好的配置类
-public class BeanConfig {
- @Bean
- @LoadBalanced
- RestTemplate template() {
- return new RestTemplate();
- }
-}
diff --git a/borrow-service/src/main/java/com/test/config/LoadBalancerConfig.java b/borrow-service/src/main/java/com/test/config/LoadBalancerConfig.java
deleted file mode 100644
index 535dc5a..0000000
--- a/borrow-service/src/main/java/com/test/config/LoadBalancerConfig.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.test.config;
-
-import org.springframework.cloud.client.ServiceInstance;
-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.core.env.Environment;
-
-/**
- * ClassName: LoadBalancerConfig
- * Package: com.test.config
- *
- * @author yovinchen
- * @Create 2023/8/15 16:46
- */
-public class LoadBalancerConfig {
- //将官方提供的 RandomLoadBalancer 注册为Bean
- @Bean
- public ReactorLoadBalancer randomLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory){
- String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
- return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
- }
-}
diff --git a/borrow-service/src/main/java/com/test/service/client/BookClient.java b/borrow-service/src/main/java/com/test/service/client/BookClient.java
new file mode 100644
index 0000000..e6ac7d7
--- /dev/null
+++ b/borrow-service/src/main/java/com/test/service/client/BookClient.java
@@ -0,0 +1,19 @@
+package com.test.service.client;
+
+import com.test.entity.Book;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ * ClassName: VookClient
+ * Package: com.test.service.client
+ *
+ * @author yovinchen
+ * @Create 2023/8/15 16:56
+ */
+@FeignClient("bookservice")
+public interface BookClient {
+ @RequestMapping("/book/{bid}")
+ Book findBookById(@PathVariable("bid") int bid);
+}
diff --git a/borrow-service/src/main/java/com/test/service/client/UserClient.java b/borrow-service/src/main/java/com/test/service/client/UserClient.java
new file mode 100644
index 0000000..a6a488a
--- /dev/null
+++ b/borrow-service/src/main/java/com/test/service/client/UserClient.java
@@ -0,0 +1,22 @@
+package com.test.service.client;
+
+import com.test.entity.User;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+/**
+ * ClassName: UserClient
+ * Package: com.test.service.client
+ *
+ * @author yovinchen
+ * @Create 2023/8/15 16:54
+ */
+@FeignClient("userservice")
+//声明为userservice服务的HTTP请求客户端
+public interface UserClient {
+
+ //路径保证和其他微服务提供的一致即可
+ @RequestMapping("/user/{uid}")
+ User getUserById(@PathVariable("uid") int uid); //参数和返回值也保持一致
+}
diff --git a/borrow-service/src/main/java/com/test/service/impl/BorrowServiceImpl.java b/borrow-service/src/main/java/com/test/service/impl/BorrowServiceImpl.java
index 1bda6b9..4e5a965 100644
--- a/borrow-service/src/main/java/com/test/service/impl/BorrowServiceImpl.java
+++ b/borrow-service/src/main/java/com/test/service/impl/BorrowServiceImpl.java
@@ -7,6 +7,8 @@ import com.test.entity.User;
import com.test.entity.UserBorrowDetail;
import com.test.mapper.BorrowMapper;
import com.test.service.BorrowService;
+import com.test.service.client.BookClient;
+import com.test.service.client.UserClient;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
@@ -28,16 +30,20 @@ public class BorrowServiceImpl implements BorrowService {
BorrowMapper mapper;
@Resource
- RestTemplate template;
+ UserClient userClient;
+
+ @Resource
+ BookClient bookClient;
@Override
public UserBorrowDetail getUserBorrowDetailByUid(int uid) {
List borrow = mapper.getBorrowsByUid(uid);
- //这里不用再写IP,直接写服务名称userservice
- User user = template.getForObject("http://userservice/user/" + uid, User.class);
- //这里不用再写IP,直接写服务名称bookservice
- List bookList = borrow.stream().map(b -> template.getForObject("http://bookservice/book/" + b.getBid(), Book.class)).collect(Collectors.toList());
+ User user = userClient.getUserById(uid);
+ List bookList = borrow
+ .stream()
+ .map(b -> bookClient.findBookById(b.getBid()))
+ .collect(Collectors.toList());
return new UserBorrowDetail(user, bookList);
}
}
diff --git a/user-service/src/main/java/com/test/controller/UserController.java b/user-service/src/main/java/com/test/controller/UserController.java
index b02a8db..531dca1 100644
--- a/user-service/src/main/java/com/test/controller/UserController.java
+++ b/user-service/src/main/java/com/test/controller/UserController.java
@@ -25,6 +25,7 @@ public class UserController {
//这里以RESTFul风格为例
@RequestMapping("/user/{uid}")
public User findUserById(@PathVariable("uid") int uid) {
+ System.out.println("我被调用了!!!");
return service.getUserById(uid);
}
}