使用Feign服務發現消費服務
- 啟動Nacos訪問地址為:http://101.200.201.195:8848/nacos/
- 啟動buscien-service-01業務服務,進行消費
準備作業完成后進行服務消費,
第一步:創建一個Maven工程buscien-service-03
第二步:編輯pom.xml,加入必要的依賴配置
<!-- 匯入bom依賴管理工程 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.opensource</groupId>
<artifactId>bom</artifactId>
<version>1.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 業務服務所需依賴 -->
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
在bom工程中已經全部定義好了對應的版本所以我們在業務工程中就不需要定義依賴版本了,統一在bom中進行維護,
第三步:創建一個SpringBoot啟動類,并且增加一個Http服務
/**
* SpringCloud Alibaba 服務發現 Feign進行消費服務
*
* @author WuWenTao
* @version 1.0
* @date 2020/9/2 14:18
*/
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class BuscienService03Appl {
public static void main(String[] args) {
SpringApplication.run(BuscienService03Appl.class, args);
}
}
@FeignClient("buscien-service-01-app")
interface BuscienDemo1Feign {
@GetMapping("/buscien1/sayHello")
public String sayHello(@RequestParam(name = "name") String name);
}
@RestController
@RequestMapping("/buscien3/")
class FeignConsumerController {
@Autowired
private BuscienDemo1Feign buscienDemo1Feign;
@GetMapping("/consumer")
public String consumer(@RequestParam String name) {
return buscienDemo1Feign.sayHello(name);
}
}
以上內容非常清晰,啟動類上增加@EnableFeignClients用于告訴框架掃描所有通過注解@FeignClient定義的feign客戶端,BuscienDemo1Feign介面中使用@FeignClient宣告代表他是一個Feign客戶端,并且參考的是buscien-service-01-app服務,FeignConsumerController中注入Feign呼叫即可,
第四步:撰寫application.properties
server.port=2000
spring.application.name=buscien-service-03-app
spring.cloud.nacos.discovery.server-addr=101.200.201.195:8848
第五步:啟動BuscienService03Appl,啟動完成,在Nacos界面中能夠看到注冊上去的服務,訪問BuscienService03Appl中的服務介面:
http://localhost:3000/buscien3/consumer?name=ServiceConsumer
請求成功后回傳:
hello ServiceConsumer
Feign傳遞請求頭
在做介面請求時,我們經常會在header頭中增加一些鑒權資訊,如token 或 jwt,那么在通過fegin從A server去呼叫B server的介面時,如果B server的介面需要header資訊,我們需要將A sever獲取的header轉發到B上,可以通過實作Feign提供的攔截器來實作,創建FeignRequestInterceptor類進行傳遞請求頭,
/**
* Feign傳遞請求頭
*
* @author WuWenTao
* @version 1.0
* @date 2020/9/2 17:12
*/
@Component
public class FeignRequestInterceptor implements RequestInterceptor {
private Logger log = LoggerFactory.getLogger(FeignRequestInterceptor.class);
@Override
public void apply(RequestTemplate template) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
.getRequestAttributes();
//獲取請求頭
HttpServletRequest request = attributes.getRequest();
Enumeration<String> headerNames = request.getHeaderNames();
if (headerNames != null) {
while (headerNames.hasMoreElements()) {
String name = headerNames.nextElement();
String values = request.getHeader(name);
//將請求頭保存到模板中
template.header(name, values);
}
//如需傳遞各位如token
// template.header("token", token);
log.info("feign interceptor header:{}", template);
}
}
}
以上內容非常清晰,獲取當前請求正文請求頭存入Feign請求模板中,
原始碼地址:https://github.com/450255266/spring-cloud-alibaba
Nacos地址對外開放:http://101.200.201.195:8848/nacos/
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/17421.html
標籤:Java
上一篇:JAVA 例外
下一篇:LeetCode–矩陣中的路徑
