From fdbe9cbe62ea75224034f37229ea09b971c0f62f Mon Sep 17 00:00:00 2001 From: YoVinchen Date: Tue, 15 Aug 2023 17:48:38 +0800 Subject: [PATCH] =?UTF-8?q?openfeign=E6=95=B4=E5=90=88=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- borrow-service/pom.xml | 14 +++++++---- .../main/java/com/test/BorrowApplication.java | 3 ++- .../main/java/com/test/config/BeanConfig.java | 25 ------------------- .../com/test/config/LoadBalancerConfig.java | 25 ------------------- .../com/test/service/client/BookClient.java | 19 ++++++++++++++ .../com/test/service/client/UserClient.java | 22 ++++++++++++++++ .../test/service/impl/BorrowServiceImpl.java | 16 ++++++++---- .../com/test/controller/UserController.java | 1 + 8 files changed, 64 insertions(+), 61 deletions(-) delete mode 100644 borrow-service/src/main/java/com/test/config/BeanConfig.java delete mode 100644 borrow-service/src/main/java/com/test/config/LoadBalancerConfig.java create mode 100644 borrow-service/src/main/java/com/test/service/client/BookClient.java create mode 100644 borrow-service/src/main/java/com/test/service/client/UserClient.java 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); } }