這篇主要講一下服務和服務之間是怎樣調用的
如果想學習Java工程化、高性能及分佈式、深入淺出。微服務、Spring,MyBatis,Netty源碼分析的朋友可以加我的Java高級交流:854630135,羣裏有阿里大牛直播講解技術,以及Java大型互聯網技術的視頻免費分享給大家。
我自己搭建了一個客戶端微服務:
所以現在有兩個微服務,我們所實現的就是微服務1和微服務2之間的調用
註冊中心就不用多說了,具體看一下兩個微服務
application.yml配置也不用說了,不知道怎麼配置的請參考我上篇博客
在project-solr中的constroller中:
@RestController//這裏使此Constroller中所有的方法返回的不是頁面 public class SolrSearchConstroller { @RequestMapping("/SolrSearch") public String SolrSearch(){ return "這裏是Solr"; } }
這裏是爲了讓另一個服務調用
在另一個微服務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中調用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是調用註冊中心裏的名字 model.addAttribute("msg",msg); return "/index"; } }
這裏的project-solr是配置裏每個服務註冊到註冊中心的名字,根據名字調用服務的ip地址,可以實現動態微服務調用效果,它不會因爲更換電腦而出錯
下面接着建設頁面,這裏我用的是thymeleaf組件
我們先在build.gradle中添加依賴:
//thymeleaf組件 compile 'org.springframework.boot:spring-boot-starter-thymeleaf'
然後新建默認的目錄:
這裏必須新建templates包,因爲是默認的目錄
然後index.html中:
運行:
成功!
下面簡單的說一下spring cloud eureka註冊中心的自我保護機制
優點:當服務與註冊中心由於某個原因斷開的時候,服務與服務之間還可以連接,這時候eureka不會立刻清理,依舊會對改微服的信息進行保存。
缺點:當服務與註冊中心由於某個原因斷開的時候,服務與服務之間也不可以連接,這時候可能會帶壞其他服務器。
當然是優點大於缺點的
那eureka註冊中心是怎麼知道微服務還存活的呢?
其實每個服務每分鐘都會對註冊中心進行心跳,而註冊中心會接受心跳,若註冊中心沒有接受到心跳則會認爲該服務死亡
官方對於自我保護機制的定義:eureka官方自我保護機制