spring cloud中微服務之間的調用以及eureka的自我保護機制


上篇講了spring cloud注冊中心及客戶端的注冊,所以這篇主要講一下服務和服務之間是怎樣調用的

不會搭建的小伙伴請參考我上一篇博客:idea快速搭建spring cloud-注冊中心與注冊

基於上一篇的搭建我又自己搭建了一個客戶端微服務:

所以現在有兩個微服務,我們所實現的就是微服務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官方自我保護機制


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM