spring cloud中微服務之間的調(diào)用以及eureka的自我保護機制詳解
上篇講了spring cloud注冊中心及客戶端的注冊,所以這篇主要講一下服務和服務之間是怎樣調(diào)用的
不會搭建的小伙伴請參考我上一篇博客:idea快速搭建spring cloud-注冊中心與注冊
基于上一篇的搭建我又自己搭建了一個客戶端微服務:
所以現(xiàn)在有兩個微服務,我們所實現(xiàn)的就是微服務1和微服務2之間的調(diào)用
注冊中心就不用多說了,具體看一下兩個微服務
application.yml配置也不用說了,不知道怎么配置的請參考我上篇博客
在project-solr中的constroller中:
@RestController//這里使此Constroller中所有的方法返回的不是頁面 public class SolrSearchConstroller { @RequestMapping("/SolrSearch") public String SolrSearch(){ return "這里是Solr"; } }
這里是為了讓另一個服務調(diào)用
在另一個微服務project-shopping-mall 啟動類中,我們 必須定義一個方法:
@SpringBootApplication @EnableDiscoveryClient //表示eureka客戶端 public class ShoppingMallProvider { @Bean @LoadBalanced//在注冊中心里進行查找微服務 public RestTemplate restTemplate(){ RestTemplate restTemplate=new RestTemplate(); return restTemplate; } public static void main(String[] args) { SpringApplication.run(ShoppingMallProvider.class,args); } }
然后在project-shopping-mall里的Controller中調(diào)用project-solr中的constroller:
@Controller public class PageController { @Autowired private RestTemplate restTemplate; @RequestMapping("/toIndex") public String toIndex(Model model){ String msg=restTemplate.getForEntity("http://project-solr/SolrSearch",String.class).getBody();//project-solr是調(diào)用注冊中心里的名字 model.addAttribute("msg",msg); return "/index"; } }
這里的project-solr是配置里每個服務注冊到注冊中心的名字,根據(jù)名字調(diào)用服務的ip地址,可以實現(xiàn)動態(tài)微服務調(diào)用效果,它不會因為更換電腦而出錯
下面接著建設頁面,這里我用的是thymeleaf組件
我們先在build.gradle中添加依賴:
//thymeleaf組件 compile 'org.springframework.boot:spring-boot-starter-thymeleaf'
然后新建默認的目錄:
這里必須新建templates包,因為是默認的目錄
然后index.html中:
運行:
成功!
下面簡單的說一下spring cloud eureka注冊中心的自我保護機制
優(yōu)點:當服務與注冊中心由于某個原因斷開的時候,服務與服務之間還可以連接,這時候eureka不會立刻清理,依舊會對改微服的信息進行保存。
缺點:當服務與注冊中心由于某個原因斷開的時候,服務與服務之間也不可以連接,這時候可能會帶壞其他服務器。
當然是優(yōu)點大于缺點的
那eureka注冊中心是怎么知道微服務還存活的呢?
其實每個服務每分鐘都會對注冊中心進行心跳,而注冊中心會接受心跳,若注冊中心沒有接受到心跳則會認為該服務死亡
官方對于自我保護機制的定義:eureka官方自我保護機制
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Maven?Web項目使用Cargo插件實現(xiàn)自動化部署的詳細步驟
cargo ,它是一組幫助用戶實現(xiàn)自動化部署,操作Web容器的工具,并且?guī)缀踔С炙械腤eb容器,這篇文章主要介紹了Maven?Web項目使用Cargo實現(xiàn)自動化部署,需要的朋友可以參考下2023-02-02springcloud檢索中間件?ElasticSearch?分布式場景的使用
單機的elasticsearch做數(shù)據(jù)存儲,必然面臨兩個問題:海量數(shù)據(jù)存儲問題、單點故障問題,本文重點給大家介紹springcloud檢索中間件?ElasticSearch?分布式場景的運用,感興趣的朋友跟隨小編一起看看吧2023-10-10解決MyBatis-Plus使用動態(tài)表名selectPage不生效的問題
這篇文章主要介紹了如惡化解決MyBatis-Plus使用動態(tài)表名selectPage不生效的問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-11-11SpringBoot封裝自己的Starter的實現(xiàn)方法
這篇文章主要介紹了SpringBoot封裝自己的Starter的實現(xiàn)方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-04Spring中的HandlerMapping執(zhí)行流程詳解
這篇文章主要介紹了Spring中的HandlerMapping執(zhí)行流程詳解,HandlerMapping在Spring MVC框架的jar包下面,他是處理映射器,為用戶發(fā)送的請求找到合適的Handler Adapter,它將會把請求映射為HandlerExecutionChain對象,需要的朋友可以參考下2023-08-08