分布式醫(yī)療掛號(hào)系統(tǒng)Nacos微服務(wù)Feign遠(yuǎn)程調(diào)用數(shù)據(jù)字典
需求:制作一個(gè)醫(yī)院列表的顯示功能。列表中包含醫(yī)院編號(hào)、醫(yī)院等級(jí)、醫(yī)院地址、狀態(tài)等。
分析:首先確定是典型的條件查詢帶分頁。由于醫(yī)院的等級(jí)需要查詢數(shù)據(jù)字典部分,這個(gè)調(diào)用是在不同的微服務(wù)模塊中,這就需要進(jìn)行遠(yuǎn)程調(diào)用。
步驟1:向Nacos服務(wù)中心注冊(cè)微服務(wù)
(1)引入Nacos依賴
<!--服務(wù)注冊(cè)--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
(2)配置微服務(wù)到Nacos
1.配置service-hosp
# 服務(wù)端口 server.port=8201 # 服務(wù)名 spring.application.name=service-hosp # Nacos服務(wù)地址 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
2.配置service-cmn
# 服務(wù)端口 server.port=8202 # 服務(wù)名 spring.application.name=service-cmn # Nacos服務(wù)地址 spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
3.將各微服務(wù)模塊添加到注冊(cè)中心
在各微服務(wù)模塊的啟動(dòng)類添加@EnableDiscoveryClient,表示將微服務(wù)注冊(cè)到Nacos。
步驟2:使用Feign進(jìn)行遠(yuǎn)程調(diào)用
下面在service-hosp創(chuàng)建醫(yī)院列表接口(條件查詢帶分頁),在service-cmn中創(chuàng)建根據(jù)編號(hào)查詢數(shù)據(jù)字典名稱的醫(yī)院等級(jí)接口。然后通過Feign完成遠(yuǎn)程調(diào)用。
(1)service-hosp醫(yī)院列表接口
訪問路徑
/admin/hosp/hospital/list/{page}/{limit}
Controller:
@RestController @RequestMapping("/admin/hosp/hospital") @CrossOrigin public class HospitalController { @Autowired private HospitalService hospitalService; /** * 醫(yī)院列表(條件查詢帶分頁) * @param page * @param limit * @param hospitalQueryVo * @return */ @GetMapping("list/{page}/{limit}") public Result listHosp(@PathVariable Integer page, @PathVariable Integer limit, HospitalQueryVo hospitalQueryVo){ Page<Hospital> pageModel = hospitalService.selectHospPage(page,limit,hospitalQueryVo); return Result.ok(pageModel); } }
Service接口:
// 醫(yī)院列表(條件查詢帶分頁) Page<Hospital> selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo);
Service實(shí)現(xiàn)類:
// 醫(yī)院列表(條件查詢帶分頁) @Override public Page<Hospital> selectHospPage(Integer page, Integer limit, HospitalQueryVo hospitalQueryVo) { // 1.創(chuàng)建pageable對(duì)象 Pageable pageable = PageRequest.of(page - 1, limit); // 2.創(chuàng)建條件匹配器 ExampleMatcher matcher = ExampleMatcher.matching() .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING) .withIgnoreCase(true); // 3.hospitalQueryVo轉(zhuǎn)換為Hospital對(duì)象 Hospital hospital = new Hospital(); BeanUtils.copyProperties(hospitalQueryVo, hospital); // 4.創(chuàng)建對(duì)象 Example<Hospital> example = Example.of(hospital, matcher); // 5.調(diào)用方法實(shí)現(xiàn)查詢 Page<Hospital> pages = hospitalRepository.findAll(example, pageable); // 6.得到所有醫(yī)院信息的集合 pages.getContent().stream().forEach(item -> { // 此方法執(zhí)行了遠(yuǎn)程調(diào)用 this.setHospitalHosType(item); }); return pages; }
Repository:
@Repository public interface HospitalRepository extends MongoRepository<Hospital,String> { /** * 根據(jù)HosCode獲得記錄 * @param hoscode * @return */ Hospital getHospitalByHoscode(String hoscode); }
(2)service-cmn醫(yī)院等級(jí)/地址接口
由于醫(yī)院等級(jí)、省市區(qū)地址都是取得數(shù)據(jù)字典value值,所以在列表顯示醫(yī)院等級(jí)、醫(yī)院地址時(shí)要根據(jù)數(shù)據(jù)字典value值獲取數(shù)據(jù)字典名稱。我們?cè)谶@里需要寫兩個(gè)接口。
查詢醫(yī)院等級(jí),訪問路徑為
/admin/cmn/dict/getName/{dictCode}/{value}
查詢醫(yī)院地址,訪問路徑為
/admin/cmn/dict/getName/{value}
Controller:
/** * 根據(jù)dictCode和value查詢 數(shù)據(jù)字典 * @param dictCode * @param value * @return */ @GetMapping("getName/{dictCode}/{value}") public String getName(@PathVariable String dictCode, @PathVariable String value) { String dictName = dictService.getDictName(dictCode, value); return dictName; } /** * 根據(jù)value查詢 數(shù)據(jù)字典 * @param value * @return */ @GetMapping("getName/{value}") public String getName(@PathVariable String value) { String dictName = dictService.getDictName("",value); return dictName; }
Service接口:
/** * 根據(jù)dictCode和value查詢 數(shù)據(jù)字典 * @param dictCode * @param value * @return */ String getDictName(String dictCode, String value);
Service實(shí)現(xiàn)類:
/** * 根據(jù)dictCode和value查詢 數(shù)據(jù)字典 * @param dictCode * @param value * @return */ @Override public String getDictName(String dictCode, String value) { // 如果dictCode為空,直接根據(jù)value查詢;否則根據(jù)dictCode和value查詢 if (StringUtils.isEmpty(dictCode)) { QueryWrapper<Dict> wrapper = new QueryWrapper<>(); wrapper.eq("value", value); Dict dict = baseMapper.selectOne(wrapper); return dict.getName(); } else { // 根據(jù)dictcode查詢dict對(duì)象,得到dict的id值 Dict codeDict = this.getDictByDictCode(dictCode); Long parent_id = codeDict.getId(); // 根據(jù)parent_id和value進(jìn)行查詢 Dict finalDict = baseMapper.selectOne(new QueryWrapper<Dict>() .eq("parent_id", parent_id) .eq("value", value)); return finalDict.getName(); } }
數(shù)據(jù)訪問層由Mybatis-plus完成。
(3)引入Feign依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <scope>provided</scope> </dependency>
單獨(dú)創(chuàng)建service-cmn-clientMave工程進(jìn)行遠(yuǎn)程調(diào)用。
(4)調(diào)用端通過包掃描Feign
在調(diào)用端的啟動(dòng)類上,添加 @EnableFeignClients(basePackages = "com.gql") 注解。
(5)遠(yuǎn)程調(diào)用
接口中的方法為要調(diào)用模塊的方法簽名,注意訪問路徑為完整路徑,且形參中注解后要加上參數(shù)名稱。
1.遠(yuǎn)程調(diào)用接口
// 要調(diào)用的微服務(wù)名稱 @FeignClient("service-cmn") @Repository public interface DictFeignClient { /** * 根據(jù)dictCode和value查詢 數(shù)據(jù)字典 * @param dictCode * @param value * @return */ @GetMapping("/admin/cmn/dict/getName/{dictCode}/{value}") public String getName(@PathVariable("dictCode") String dictCode, @PathVariable("value") String value); /** * 根據(jù)value查詢 數(shù)據(jù)字典 * @param value * @return */ @GetMapping("/admin/cmn/dict/getName/{value}") public String getName(@PathVariable("value") String value); }
2.執(zhí)行遠(yuǎn)程調(diào)用
@Autowired private DictFeignClient dictFeignClient; // 獲取查詢list集合,遍歷進(jìn)行醫(yī)院等級(jí)封裝 private Hospital setHospitalHosType(Hospital hospital) { // 封裝醫(yī)院等級(jí) String hostypeString = dictFeignClient.getName("Hostype", hospital.getHostype()); hospital.getParam().put("hostypeString", hostypeString); // 封裝醫(yī)院省市區(qū) String provinceString = dictFeignClient.getName(hospital.getProvinceCode()); String cityString = dictFeignClient.getName(hospital.getCityCode()); String districtString = dictFeignClient.getName(hospital.getDistrictCode()); hospital.getParam().put("fullAddress", provinceString + cityString + districtString); return hospital; }
步驟3:使用swagger測試
在swagger頁面中添加請(qǐng)求參數(shù)后,點(diǎn)擊執(zhí)行按鈕。
成功通過遠(yuǎn)程調(diào)用獲取到醫(yī)院等級(jí)、地址:
以上就是分布式醫(yī)療掛號(hào)系統(tǒng)Nacos微服務(wù)Feign遠(yuǎn)程調(diào)用數(shù)據(jù)字典的詳細(xì)內(nèi)容,更多關(guān)于分布式醫(yī)療掛號(hào)系統(tǒng)Nacos Feign遠(yuǎn)程調(diào)用數(shù)據(jù)字典的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- springBoot使用openfeign來遠(yuǎn)程調(diào)用的實(shí)現(xiàn)
- Springboot FeignClient調(diào)用Method has too many Body parameters解決
- SpringBoot 關(guān)于Feign的超時(shí)時(shí)間配置操作
- springboot啟動(dòng)feign項(xiàng)目報(bào)錯(cuò):Service id not legal hostnam的解決
- 基于springboot服務(wù)間Feign調(diào)用超時(shí)的解決方案
- springboot中使用Feign整合nacos,gateway進(jìn)行微服務(wù)之間的調(diào)用方法
相關(guān)文章
SpringBoot中并發(fā)定時(shí)任務(wù)的實(shí)現(xiàn)、動(dòng)態(tài)定時(shí)任務(wù)的實(shí)現(xiàn)(看這一篇就夠了)推薦
這篇文章主要介紹了SpringBoot并發(fā)定時(shí)任務(wù)動(dòng)態(tài)定時(shí)任務(wù)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04SpringBoot應(yīng)用啟動(dòng)內(nèi)置Tomcat的過程源碼分析
這篇文章主要介紹了SpringBoot應(yīng)用啟動(dòng)內(nèi)置Tomcat的過程分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-07-07詳解Java Web項(xiàng)目啟動(dòng)執(zhí)行順序
這篇文章主要介紹了詳解Java Web項(xiàng)目啟動(dòng)執(zhí)行順序,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06idea中g(shù)it如何刪除commit提交的log信息
這篇文章主要介紹了idea中g(shù)it如何刪除commit提交的log信息問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07maven插件maven-jar-plugin構(gòu)建jar文件的詳細(xì)使用
maven-jar-plugin插件時(shí)maven中最常用的插件,也是maven構(gòu)建Java程序執(zhí)行包或者依賴包的默認(rèn)插件,本文主要介紹了maven插件maven-jar-plugin構(gòu)建jar文件的詳細(xì)使用,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02基于JavaMail的Java實(shí)現(xiàn)簡單郵件發(fā)送功能
這篇文章主要為大家詳細(xì)介紹了基于JavaMail的Java實(shí)現(xiàn)簡單郵件發(fā)送功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09java正則表達(dá)式匹配規(guī)則超詳細(xì)總結(jié)
正則表達(dá)式并不僅限于某一種語言,但是在每種語言中有細(xì)微的差別,下面這篇文章主要給大家介紹了關(guān)于java正則表達(dá)式匹配規(guī)則的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-10-10SpringBoot使用MockMvc進(jìn)行單元測試的實(shí)例代碼
在Spring Boot應(yīng)用程序中,使用MockMvc進(jìn)行單元測試是一種有效的方式,可以驗(yàn)證控制器的行為和API的正確性,在這篇博客中,我們將介紹如何使用MockMvc對(duì)用戶控制器進(jìn)行測試,感興趣的朋友可以參考下2024-01-01