spring cloud微服務三:Eureka服務治理之注冊服務提供者及服務的發現和消費


  當服務注冊中心成功建立以后,就需要有服務的注冊和消費,否則這個服務注冊中心就沒有了存在的意義,而實際上,一個簡單的服務注冊也是非常簡單的,僅僅需要實現四部曲就好。
  
  首先,還是建立一個基本的spring boot的項目,創建的時候選擇web,然后在pom.xml文件中加入Eureka的依賴,和服務注冊中心的maven配置一樣,這里就不再羅列代碼。
  
  第二步,就是修改application.properties文件,指定端口和服務名稱以及注冊中心的地址:
  
  server.port=1001
  
  spring.application.name=hello-service
  
  eureka.client.serviceUrl.defaultZone=http://server1:1000/eureka/,http://server2:2000/eureka/
  
  因為上一步中實現了注冊中心的集群模式,因此這里可以指定兩個,如果有更多的服務注冊中心,還可以指定更多,中間以逗號分隔。
  
  第三步,使用注解開啟自動裝配,使服務能夠向注冊中心注冊、向注冊中心服務租約(實際上就是定時器持續發送心跳告訴服務注冊中心自己還活着)、取消租約、查詢服務列表等,這個注解是@EnableDiscoveryClient,添加以后的代碼如下:
  
  @EnableDiscoveryClient
  
  @SpringBootApplication
  
  public class EurekaService1Application {
  
  public static void main(String[] args) {
  
  SpringApplication.run(EurekaService1Application.class, args);
  
  }
  
  第四步,我們說要進行服務注冊,當上邊一切准備工作做好以后,自然需要有服務才能注冊,而這個服務就是一個看起來很普通的controller類,如圖:
  
  @RestController
  
  public class HelloController {
  
  @Autowired
  
  private DiscoveryClient client;
  
  @RequestMapping(value="/hello",method=RequestMethod.GET)
  
  public String sayHello(){
  
  ServiceInstance instance=client.getLocalServiceInstance();
  
  return "hello "+instance.getHost()+","+instance.getPort()+","+instance.getServiceId();
  
  }
  
  這里的DiscoveryClient可以獲取注冊到服務注冊中心的服務的相關信息,並不是必須注入的,這里完全可以寫成如下所示的代碼:
  
  @RestController
  
  public class HelloController {
  
  @RequestMapping(value="/hello",method=RequestMethod.GET)
  
  public String sayHello(){
  
  return "hello";
  
  }
  
  當然了,因為只是了解服務注冊的過程,所以這里僅僅這么簡單,實際的業務邏輯自然不會是這樣。
  
  那么通過上邊四步,一個能夠注冊到服務注冊中心提供服務的服務就完成了,啟動這個服務就會被注冊到服務注冊中心,我們可以通過服務注冊中心的頁面來查看:
  
  這里寫圖片描述
  
  成功的創建了一個服務並注冊到注冊中心,同樣的,為了高可用,我們可以再建一個具有同樣功能的服務,而這個過程就更加的簡單,只需要更改一下端口號,也就是server.port,然后重新啟動就可以,啟動后會看到上邊的頁面如下(當然了,這里也是為了測試方便,實際情況也應該是在兩台機器上運行的兩套代碼才對):
  
  這里寫圖片描述
  
  這里我們會看到已經有了兩個同應用名的服務,端口分別是1001和2001。
  
  而在上述頁面中還需要注意的是那一段醒目的紅色提示,它的意思就是說開啟了自我保護機制,也就是說當服務失效后,有可能注冊中心還會保留一段時間該服務的信息,這樣就可能導致服務消費方獲取服務列表的時候依然能夠獲取到這個服務,但是實際上向該服務發送請求的時候又無法成功請求,那么學習的過程中可以使用以下配置關閉自我保護機制,然后如果再訪問注冊中心的頁面便不會再出現這個提示,也不會出現那種服務失效后還保留在注冊中心的情況。
  
  #設置是否開啟自我保護機制,默認是true
  
  eureka.server.enable-self-preservation=false
  
  服務注冊好以后,下邊就是服務的發現和消費,通常有ribbon和feign兩種方式,而feign實際上也是以ribbon為基礎的,這兩種后邊都還需要具體詳細的學習,所以這里只簡單的演示一下消費的過程,不做太詳細的解釋。ribbon可以實現負載均衡,這里使用最簡單的模板實現。
  
  首先還是建立一個基礎spring boot項目,然后pom.xml中加入eureka和ribbon的依賴以及eureka的版本信息:
  
  <dependency>
  
  <groupId>org.springframework.cloud</groupId>
  
  <artifactId>spring-cloud-starter-eureka<www.dazhonyule.cn /artifactId>
  
  </dependency>
  
  <dependency>
  
  <groupId>org.springframework.cloud</groupId>
  
  <artifactId>spring-cloud-starter-ribbon<www.yuheng119.com/ /artifactId>
  
  </dependency>
  
  <dependencyManagement>
  
  <dependencies>
  
  <dependency>
  
  <groupId>org.springframework.cloud</groupId>
  
  <artifactId>spring-cloud-dependencies</artifactId>
  
  <version>Brixton.RELEASE</version>
  
  <type>pom</type>
  
  <scope>import</scope>
  
  </dependency>
  
  </dependencies>
  
  </dependencyManagement>
  
  然后application.properties文件內容如下:
  
  server.port=3001
  
  spring.application.name=rabbit-client
  
  eureka.client.serviceUrl.defaultZone=http://server1:1000/eureka/,http://server2:2000/eureka/
  
  再然后就是創建項目時生成的類中加入@EnableDiscoveryClient參數開啟自動裝配,以及注入服務消費模板並開啟負載均衡:
  
  @Bean
  
  @LoadBalanced
  
  RestTemplate restTemplate(www.xuancayule.com){
  
  return new RestTemplate(http://www.ysbyl.biz/;
  
  之后的這個步驟實際不是必要的,只是為了能夠更直觀的在頁面中看到結果,所以加入一個controller類,輸出服務的一些基本信息:
  
  @RestController
  
  public class ConsumerController {
  
  @Autowired
  
  RestTemplate restTemplate;
  
  @RequestMapping(value="/hello",method=RequestMethod.GET)
  
  public String hello(www.yigouyule2.cn/){
  
  return restTemplate.getForEntity("http:/www.22yigouyule.cn/ /HELLO-SERVICE/hello", String.class).getBody();
  
  }
  
  那么當我們啟動這個消費端以后,頁面訪問localhost:3001/hello就可以看到如下頁面:


免責聲明!

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



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