Nacos通过OpenFeign实现负载均衡远程调用
This commit is contained in:
parent
60512849e8
commit
826f9fb185
@ -18,6 +18,10 @@
|
|||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
</properties>
|
</properties>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.cloud</groupId>
|
||||||
|
<artifactId>spring-cloud-starter-openfeign</artifactId>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.alibaba.cloud</groupId>
|
<groupId>com.alibaba.cloud</groupId>
|
||||||
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
|
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
|
||||||
|
@ -3,6 +3,7 @@ package com.test;
|
|||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
|
import org.springframework.boot.autoconfigure.security.oauth2.client.EnableOAuth2Sso;
|
||||||
|
import org.springframework.cloud.openfeign.EnableFeignClients;
|
||||||
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
|
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -13,6 +14,7 @@ import org.springframework.security.oauth2.config.annotation.web.configuration.E
|
|||||||
* @Create 2023/8/14 16:25
|
* @Create 2023/8/14 16:25
|
||||||
*/
|
*/
|
||||||
@EnableResourceServer
|
@EnableResourceServer
|
||||||
|
@EnableFeignClients
|
||||||
@SpringBootApplication
|
@SpringBootApplication
|
||||||
public class BorrowApplication {
|
public class BorrowApplication {
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
@ -1,30 +0,0 @@
|
|||||||
package com.test.config;
|
|
||||||
|
|
||||||
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
|
|
||||||
import org.springframework.context.annotation.Bean;
|
|
||||||
import org.springframework.context.annotation.Configuration;
|
|
||||||
import org.springframework.security.oauth2.client.OAuth2ClientContext;
|
|
||||||
import org.springframework.security.oauth2.client.OAuth2RestTemplate;
|
|
||||||
import org.springframework.security.oauth2.client.token.grant.client.ClientCredentialsResourceDetails;
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* ClassName: ma
|
|
||||||
* Package: com.test.config
|
|
||||||
*
|
|
||||||
* @author yovinchen
|
|
||||||
* @Create 2023/8/21 10:52
|
|
||||||
*/
|
|
||||||
@Configuration
|
|
||||||
public class WebConfiguration {
|
|
||||||
|
|
||||||
@Resource
|
|
||||||
OAuth2ClientContext context;
|
|
||||||
|
|
||||||
@Bean
|
|
||||||
@LoadBalanced
|
|
||||||
public OAuth2RestTemplate restTemplate(){
|
|
||||||
return new OAuth2RestTemplate(new ClientCredentialsResourceDetails(), context);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,20 @@
|
|||||||
|
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: BookClient
|
||||||
|
* Package: com.test.service.client
|
||||||
|
*
|
||||||
|
* @author yovinchen
|
||||||
|
* @Create 2023/8/21 20:29
|
||||||
|
*/
|
||||||
|
@FeignClient("bookservice")
|
||||||
|
public interface BookClient {
|
||||||
|
|
||||||
|
@RequestMapping("/book/{bid}")
|
||||||
|
Book getBookById(@PathVariable("bid") int bid);
|
||||||
|
}
|
@ -0,0 +1,20 @@
|
|||||||
|
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/21 20:29
|
||||||
|
*/
|
||||||
|
@FeignClient("userservice")
|
||||||
|
public interface UserClient {
|
||||||
|
|
||||||
|
@RequestMapping("/user/{uid}")
|
||||||
|
User getUserById(@PathVariable("uid") int uid);
|
||||||
|
}
|
@ -8,6 +8,8 @@ import com.test.entity.User;
|
|||||||
import com.test.entity.UserBorrowDetail;
|
import com.test.entity.UserBorrowDetail;
|
||||||
import com.test.mapper.BorrowMapper;
|
import com.test.mapper.BorrowMapper;
|
||||||
import com.test.service.BorrowService;
|
import com.test.service.BorrowService;
|
||||||
|
import com.test.service.client.BookClient;
|
||||||
|
import com.test.service.client.UserClient;
|
||||||
import org.springframework.security.oauth2.client.OAuth2RestTemplate;
|
import org.springframework.security.oauth2.client.OAuth2RestTemplate;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.client.RestTemplate;
|
||||||
@ -30,16 +32,21 @@ public class BorrowServiceImpl implements BorrowService {
|
|||||||
BorrowMapper mapper;
|
BorrowMapper mapper;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
OAuth2RestTemplate template;
|
BookClient bookClient;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
UserClient userClient;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UserBorrowDetail getUserBorrowDetailByUid(int uid) {
|
public UserBorrowDetail getUserBorrowDetailByUid(int uid) {
|
||||||
List<Borrow> borrow = mapper.getBorrowsByUid(uid);
|
List<Borrow> borrow = mapper.getBorrowsByUid(uid);
|
||||||
//这里通过调用getForObject来请求其他服务,并将结果自动进行封装
|
//这里通过调用getForObject来请求其他服务,并将结果自动进行封装
|
||||||
//获取User信息
|
//获取User信息
|
||||||
User user = template.getForObject("http://userservice/user/" + uid, User.class);
|
User user = userClient.getUserById(uid);
|
||||||
//获取每一本书的详细信息
|
//获取每一本书的详细信息
|
||||||
List<Book> bookList = borrow.stream().map(b -> template.getForObject("http://bookservice/book/" + b.getBid(), Book.class)).collect(Collectors.toList());
|
List<Book> bookList = borrow.stream()
|
||||||
|
.map(b -> bookClient.getBookById(b.getBid()))
|
||||||
|
.collect(Collectors.toList());
|
||||||
return new UserBorrowDetail(user, bookList);
|
return new UserBorrowDetail(user, bookList);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,3 +17,9 @@ security:
|
|||||||
resource:
|
resource:
|
||||||
#因为资源服务器得验证你的Token是否有访问此资源的权限以及用户信息,所以只需要一个验证地址
|
#因为资源服务器得验证你的Token是否有访问此资源的权限以及用户信息,所以只需要一个验证地址
|
||||||
token-info-uri: http://localhost:8500/sso/oauth/check_token
|
token-info-uri: http://localhost:8500/sso/oauth/check_token
|
||||||
|
feign:
|
||||||
|
oauth2:
|
||||||
|
#开启Oauth支持,这样就会在请求头中携带Token了
|
||||||
|
enabled: true
|
||||||
|
#同时开启负载均衡支持
|
||||||
|
load-balanced: true
|
||||||
|
Loading…
Reference in New Issue
Block a user