openfeign整合完成
This commit is contained in:
		@@ -18,6 +18,15 @@
 | 
			
		||||
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 | 
			
		||||
    </properties>
 | 
			
		||||
    <dependencies>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.springframework.cloud</groupId>
 | 
			
		||||
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
 | 
			
		||||
            <version>2.2.10.RELEASE</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.springframework.cloud</groupId>
 | 
			
		||||
            <artifactId>spring-cloud-starter-openfeign</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.springframework.cloud</groupId>
 | 
			
		||||
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
 | 
			
		||||
@@ -30,11 +39,6 @@
 | 
			
		||||
            <groupId>org.mybatis.spring.boot</groupId>
 | 
			
		||||
            <artifactId>mybatis-spring-boot-starter</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.example</groupId>
 | 
			
		||||
            <artifactId>commons</artifactId>
 | 
			
		||||
            <version>0.0.1-SNAPSHOT</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.example</groupId>
 | 
			
		||||
            <artifactId>commons</artifactId>
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
 
 | 
			
		||||
@@ -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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -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<ServiceInstance> randomLoadBalancer(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory){
 | 
			
		||||
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
 | 
			
		||||
        return new RandomLoadBalancer(loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class), name);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -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);
 | 
			
		||||
}
 | 
			
		||||
@@ -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);  //参数和返回值也保持一致
 | 
			
		||||
}
 | 
			
		||||
@@ -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> borrow = mapper.getBorrowsByUid(uid);
 | 
			
		||||
 | 
			
		||||
        //这里不用再写IP,直接写服务名称userservice
 | 
			
		||||
        User user = template.getForObject("http://userservice/user/" + uid, User.class);
 | 
			
		||||
        //这里不用再写IP,直接写服务名称bookservice
 | 
			
		||||
        List<Book> bookList = borrow.stream().map(b -> template.getForObject("http://bookservice/book/" + b.getBid(), Book.class)).collect(Collectors.toList());
 | 
			
		||||
        User user = userClient.getUserById(uid);
 | 
			
		||||
        List<Book> bookList = borrow
 | 
			
		||||
                .stream()
 | 
			
		||||
                .map(b -> bookClient.findBookById(b.getBid()))
 | 
			
		||||
                .collect(Collectors.toList());
 | 
			
		||||
        return new UserBorrowDetail(user, bookList);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user