SpringBoot分佈式篇Ⅷ --- 整合SpringCloud

SpringCloud是一個分佈式的總體解決方案。Spring Cloud爲開發者提供了在分佈式系統(配置管理,服務發現,熔斷,路由,微代理,控制總線,一次性token,全局鎖,leader選舉.分佈式session,集羣狀態)中快速構建的工具,使用SpringCloud的開發者能夠快速的啓動服務或構建應用、同時可以快速和雲平臺資源進行對接。本篇只講述SpringBoot與SpringCloud的整合以及簡單使用,若要詳細學習SpringCloud請參考其餘文章或官方文檔。java

一.Spring Cloud分佈式開發五大經常使用組件web

1.服務發現 --- Netfix Eurekaspring

2.客戶端負載均衡 --- Netfix Ribbonsession

3.斷路器 --- Netfix Hystrixapp

4.服務網關 --- Netfix Zuul負載均衡

5.分佈式配置 --- Spring Cloud Configmaven

 

二.建立Eureka註冊中心
建立一個空的項目,在該項目下建立一個eureka-server模塊。分佈式

eureka-server所須要的依賴:ide

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>1.4.4.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

2.1 配置eureka相關信息spring-boot

server:
  port: 8761 eureka: instance: hostname: eureka-server #eureka實例的主機名 client: register-with-eureka: false #不把本身註冊到eureka上 fetch-registry: false #不從eureka上來獲取服務的註冊信息 service-url: defaultZon: http://localhost:8761/eureka/

2.2 開啓註冊中心功能 @EnableEurekaServer

@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }

啓動時eureka-server,若啓動報錯:java.lang.NoSuchMethodError: org.springframework.boot.builder.SpringApplicationBuilder.<init>([Ljava,則更換SpringBoot版本爲1.5.12.RELEASE

 

三.服務提供者註冊服務

3.1 建立應用provider-ticket

導入eureka依賴:

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
            <version>1.4.4.RELEASE</version>
 </dependency>
@RestController
public class TicketController {
    @Autowired
    TicketService ticketService;

    @GetMapping("/ticket")
    public String getTicket(){
        System.out.println("8002端口應用");
        return ticketService.getTicket();
    }
}
@Service
public class TicketService {
    public String getTicket(){
        return "《海王》";
    }
}

3.2 配置服務

server:
  port: 8002
spring:
  application:
    name: provider-ticket

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

啓動時若報錯則跟換SpringBoot的版本爲1.5.12.RELEASE版本。

3.3 註冊多個服務

首先將服務用maven工具打包成jar,打包的時候遇到了一些問題。是SpringBoot與SpringCloud的版本不匹配致使的。下面是二者的版本對應明細

若是仍是報錯,看一下eureka-server項目是否成功啓動了,在服務註冊期間eureka-server要保持運行狀態,打包成功後,修改provider-ticket的端口號:

server:
  port: 8002

再次打包,而後使用java -jar provider-ticket-0.0.1-SNAPSHOT.jar命令分別啓動兩個jar包項目。查看http://localhost:8761/

上述狀態說明兩個服務已經成功地在Eureka上註冊了。

 

四.發現消費服務

4.1 引入依賴

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  </dependency>

4.2 在啓動類開啓發現服務功能,並配置RestTemplate

@EnableDiscoveryClient //開啓發現服務功能
@SpringBootApplication
public class ConsumerUserApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumerUserApplication.class, args);
    }
    @LoadBalanced //使用負載均衡機制
    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

4.3 配置發現服務信息

spring:
  application:
    name: consumer-user
server:
  port: 8200

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

4.4 調用服務

@RestController
public class UserController {
    @Autowired
    RestTemplate restTemplate;
    @GetMapping("/")
    @ResponseBody
    public String buyTicket(){
        String str = restTemplate.getForObject("http://PROVIDER-TICKET/ticket", String.class);
        return str;
    }
}

4.5 測試

啓動consumer-user應用,訪問http://localhost:8200/,查看是否有返回值,刷新頁面看是否啓用了負載均衡,將eureka中的兩個服務都調用了。

相關文章
相關標籤/搜索