Springboot?內(nèi)部服務(wù)調(diào)用方式
Eureka注冊(cè)的服務(wù)之間互相調(diào)用
1.請(qǐng)求方
啟動(dòng)類添加注解,掃描Eureka 中的全部服務(wù)
@SpringBootApplication
@EnableEurekaClient
@EnableFeignClients
public class LoginServiceApplication {?? ?
? ? public static void main(String[] args) {
? ? ? ? new SpringApplicationBuilder(LoginServiceApplication.class).web(true).run(args);
? ? }? ??
}pom.xml 添加包 (版本號(hào) 根據(jù)實(shí)際選擇)
<dependency> ? ? <groupId>org.springframework.cloud</groupId> ? ? <artifactId>spring-cloud-starter-feign</artifactId> ?? ?<version>1.4.6.RELEASE</version> </dependency>
創(chuàng)建接口類
@FeignClient(name="hello-service") //spring service name
public interface FeignVehicle {
?? ?
?? ?@RequestMapping(value="/hello", method = RequestMethod.GET)
?? ?@ResponseBody
?? ?public List<Map> hello(@RequestParam Map<String,String> params);
}實(shí)現(xiàn)類注入此接口類
@Autowired FeignVehicle feignVehicle;
使用的時(shí)候直接按照正常調(diào)用方式即可
Map<String,String> map = new HashMap<String, String>(); feignVehicle.hello(map);
跨服務(wù)調(diào)用的時(shí)候出現(xiàn)token信息取不到,在發(fā)送方添加攔截器
@Configuration
public class FeignConfiguration {
?
? ? @Bean
? ? public RequestInterceptor requestInterceptor() {
? ? ? ? return new RequestInterceptor() {
? ? ? ? ? ? @Override
? ? ? ? ? ? public void apply(RequestTemplate template) {?
? ? ? ? ? ? ? ? ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder
? ? ? ? ? ? ? ? ? ? ? ? .getRequestAttributes();
? ? ? ? ? ? ? ? HttpServletRequest request = attributes.getRequest(); ?//當(dāng)前服務(wù)token
?
? ? ? ? ? ? ? ? template.header("Authorization","Bearer " + request.getSession().getId()); //template 接收請(qǐng)求方token
? ? ? ? ? ? }?
? ? ? ? };
? ? }
}2.接收方
請(qǐng)求 啟動(dòng)類
@SpringBootApplication
@EnableEurekaClient
public class HelloServiceApplication {?? ?
? ? public static void main(String[] args) {
? ? ? ? new SpringApplicationBuilder(HelloServiceApplication.class).web(true).run(args);
? ? }? ??
}請(qǐng)求Controller
@Controller
@RequestMapping("/hello")
public class HelloController {?? ?
? ? @RequestMapping(value="/hello",method = RequestMethod.GET)
? ? @ResponseBody
? ? public List<Map> hello(@RequestParam Map<String, String> queryParam) {
? ? ? ? return null; ?
? ? }
}多模塊化,服務(wù)間調(diào)用的坑
問題背景
product服務(wù)作為服務(wù)端,提供了一個(gè) 對(duì)外通信Fegin接口 ProductClient,放在了com.imooc.product.client jar包下order服務(wù)作為客戶端,直接引用上面的jar,使用 ProductClient ,啟動(dòng)主類后報(bào)下圖錯(cuò)誤:

解決辦法
多模塊化時(shí),應(yīng)該在order主類上添加下面圈出來的注解,這樣啟動(dòng)后就能掃描這個(gè)包。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java使用計(jì)算md5校驗(yàn)碼方式比較兩個(gè)文件是否相同
MD5文件效驗(yàn)碼是一個(gè)判斷文件是否是相同文件的途徑,通過比較兩個(gè)文件的Md5效驗(yàn)碼是否相同來精確判斷兩個(gè)文件是否相同2014-04-04
Liquibase結(jié)合SpringBoot使用實(shí)現(xiàn)數(shù)據(jù)庫(kù)管理功能
Liquibase 是一個(gè)強(qiáng)大的數(shù)據(jù)庫(kù)管理工具,它幫助你通過自動(dòng)化管理數(shù)據(jù)庫(kù)的變更、版本控制、和回滾,簡(jiǎn)化了開發(fā)中的數(shù)據(jù)庫(kù)遷移工作,這篇文章主要介紹了Liquibase結(jié)合SpringBoot使用實(shí)現(xiàn)數(shù)據(jù)庫(kù)管理,需要的朋友可以參考下2024-12-12
Java實(shí)現(xiàn)簡(jiǎn)易俄羅斯方塊
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)易俄羅斯方塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-06-06
java基于OpenGL ES實(shí)現(xiàn)渲染實(shí)例
這篇文章主要介紹了java基于OpenGL ES實(shí)現(xiàn)渲染,實(shí)例分析了OpenGL渲染操作的相關(guān)技巧,需要的朋友可以參考下2015-06-06
selenium4.0版本在springboot中的使用問題的坑
本文主要介紹了selenium4.0版本在springboot中的使用問題的坑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
使用mybatis的typeHandler對(duì)clob進(jìn)行流讀寫方式
這篇文章主要介紹了使用mybatis的typeHandler對(duì)clob進(jìn)行流讀寫方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
Java中token的存儲(chǔ)和獲取實(shí)例代碼
關(guān)于java獲取微信Token驗(yàn)證的問題相信很多人都遇見過,尤其是對(duì)剛接觸微信開發(fā)的人來說確實(shí)有點(diǎn)棘手,下面這篇文章主要給大家介紹了關(guān)于Java中token存儲(chǔ)和獲取的相關(guān)資料,需要的朋友可以參考下2022-08-08
MyBatis寫入Json字段以及Json字段轉(zhuǎn)對(duì)象示例詳解
這篇文章主要給大家介紹了關(guān)于MyBatis寫入Json字段以及Json字段轉(zhuǎn)對(duì)象的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07

