SpringBoot學習之路---SpringBoot整合SpringCloud(Eureka&服務提供和消費)

上一篇博客記錄了SpringCloud爲我們提供了分佈式一站式的解決方案,其中有個組件Eureka,它的作用是作爲一個註冊中心,服務提供者可以把服務註冊到它上面,而服務消費者可以通過http協議的restful風格請求方式去獲取該服務,這一篇博客主要介紹SpringBoot怎麼去整合Eureka作爲註冊中心。


我們要編寫這種分佈式的應用,那麼就要創建一個空工程,再往裏面添加各種模塊,那麼先創建一個空工程:

在這裏插入圖片描述

這裏我們有一個應用場景,假設有一個買票模塊,它負責提供售票服務,另外有一個用戶模塊。瀏覽器訪問用戶模塊,用戶模塊再去遠程調用售票模塊的服務,之後用戶模塊把結果返回給瀏覽器。大致邏輯就這樣,那我們開動吧。

環境搭建:

這裏需要創建三個模塊,分別是用戶模塊(consumer_user)、售票模塊(provider_ticket)還有一個註冊中心(eureka_server)也是一個模塊。這個要注意了,和之前的Dubbo可不一樣。

Eureka模塊創建時要導入這個依賴(eureka server),這裏就使用Spring initializr來導入了,後續兩個模塊相同:

在這裏插入圖片描述

用戶模塊創建要導入的依賴(由於售票模塊需要導入的依賴也相同,這裏就略過了):

在這裏插入圖片描述

三個項目創建完成之後:

在這裏插入圖片描述

Eureka模塊:

環境弄好之後,先來把Eureka模塊搞定吧。因爲SpringBoot導入了相關依賴,會有自動配置類幫我們自動配置組件,java代碼方面不用我們管,所以我們可以直接去全局配置文件(application.yaml)中配置即可:

server:
  port: 8761
eureka:
  instance:
    hostname: eureka_server
  client:
    register-with-eureka: false #不把自己註冊到eureka
    fetch-registry: false #不從eureka上獲取服務的具體信息
    service-url:
      defaultZone: http://localhost:8761/eureka/

這裏解釋一下一些配置

  • register-with-eureka: false,目的是不把註冊中心註冊到註冊中心上…(因爲現在我們需求還用不到)
  • fetch-registry: false,不獲取服務的具體信息,因爲註冊中心不是服務消費者,所以還不用去獲取具體信息,只管註冊即可。
  • service-url.defaultZone: http://localhost:8761/eureka/, 這個屬性是eureka註冊中心的地址,是選配的,如果我們不配的話,它是有一個默認值,默認值是啥也忘記了…

還有一步別忘了,在該模塊的主啓動類上加上@EnableEurekaServer註解,之後運行主啓動類,訪問localhost:8761/,如果出現以下界面,則代表eureka模塊搞定:

在這裏插入圖片描述

可以看到在界面中有Instances currently registered with Eureka這一欄,這一欄是當前註冊中心有哪些應用,我們目前還沒有。

provider_ticket:

這個模塊就一個ticketService接口,裏面有一個getTicket()方法,並在實現類中實現它.同時爲了其他模塊可以遠程調用,需要一個controller層.

ticketService接口:

public interface ticketService {
    
    public String getTicket();
}

實現類ticketServiceImpl:

@Service
public class TicketServiceImpl implements TicketService {
    @Override
    public String getTicket() {
        return "《我愛你,中國》";
    }
}

TicketController:

@RestController
public class TicketController {

    @Autowired
    private TicketService ticketService;

    @GetMapping("/getTicket")
    public String getTicket(){
        return ticketService.getTicket();
    }
}

業務編寫好了,接下來就去配置文件做一些配置:

server:
  port: 8001
spring:
  application:
    name: provider_ticket

eureka:
  instance:
    prefer-ip-address: true #註冊服務時使用服務的ip地址
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

這裏url地址就填我們剛剛eureka的地址,這樣服務就註冊上去了.

在主啓動類上加上@EnableEurekaClient註解

我們啓動項目,注意這個過程中剛剛的eureka模塊不能關閉 ,接着訪問local:8761/

在這裏插入圖片描述

可以看到Instances currently registered with Eureka那一塊已經有provider_ticket了。

consumer_user:

接下來只剩下服務消費者模塊了。裏面有一個UserService接口,其中有一個方法buyTicket(),並在實現類中實現它。爲了測試直觀,也加上controller,這裏代碼略過。

這裏因爲eureka是基於http的resetful風格來管理服務的,所以我們需要一個類RestTemplate,編寫一個配置類並把它注入到容器中:

@Configuration
public class EurekaConfiguration {
    
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

UserService接口:

public interface UserService {

    public String buyTicket();
}

UserServiceImpl實現類:

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private RestTemplate restTemplate;

    @Override
    public String buyTicket() {

        String forObject = restTemplate.getForObject("http://localhost:8001/getTicket", String.class);

        return "買到票了:"+forObject;
    }
}

UserController:


Java代碼部分編寫完成,還是一個套路,編寫全局配置文件中的一些配置:

server:
  port: 8002
spring:
  application:
    name: consumer_user

eureka:
  instance:
    prefer-ip-address: true #註冊服務時使用服務的ip地址
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

我們可以發現這個配置文件和售票模塊的配置文件一樣,也就是說我們也把用戶模塊註冊上去了,那用戶模塊怎麼去調用呢?這就需要在用戶模塊的主啓動類上添加這個註解了@EnableDiscoveryClient.

之後運行該模塊,訪問localhost:8002/buyTicket 請確保前兩個模塊都開啓!

在這裏插入圖片描述

可以看到遠程調用成功了,並在eureka的Instances currently registered with Eureka中可以看到,有兩個模塊了:

在這裏插入圖片描述

到這裏整合成功了,有關SpringCloud的後續相關知識,我會慢慢整理補齊。不說了,先把服務關掉,風扇一直在轉…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章