SpringBoot分佈式 - SpringCloud

【本文版權歸微信公衆號"代碼藝術"(ID:onblog)全部,如果轉載請務必保留本段原創聲明,違者必究。】html

一:介紹
  • Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它爲基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分佈式會話和集羣狀態管理等操做提供了一種簡單的開發方式。
  • 微服務(Microservices Architecture)是一種架構風格,一個大型複雜軟件應用由一個或多個微服務組成。系統中的各個微服務可被獨立部署,各個微服務之間是鬆耦合的。每一個微服務僅關注於完成一件任務並很好地完成該任務。在全部狀況下,每一個任務表明着一個小的業務能力。
  • Spring Cloud 中文文檔 https://springcloud.cc/spring-cloud-dalston.html
  • Spring Cloud 官方文檔 http://projects.spring.io/spring-cloud/#quick-start
二:入門
  • 在IDEA新建空白工程

1. 註冊中心

  • 在工程下新建模塊eureka-server

1)導包web

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

2 )application.yml配置Eureka信息spring

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

3)開啓@EnableEurekaServer註解微信

package cn.zyzpp.eurekaserver;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

/**
 * 開啓@EnableEurekaServer註解
 */
@EnableEurekaServer
@SpringBootApplication
public class EurekaServerApplication {

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

4)開啓註冊中心架構

  • 啓動該應用,訪問http://localhost:8761/ 進入Spring Eureka頁面即成功。

2.服務提供者

  • 新建模塊:provider-ticket

1)導入依賴app

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

2)application.yml配置Eureka信息負載均衡

server:
  port: 8001 #8002
spring:
  application:
    name: provider-ticket
eureka:
  instance:
    prefer-ip-address: true #註冊服務的時候使用服務的Ip地址
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

3)Service層方法分佈式

package cn.zyzpp.providerticket.service;

import org.springframework.stereotype.Service;

/**
 * Create by yster@foxmail.com 2018/6/4/004 18:37
 */
@Service
public class TicketService {

    public String getTicket(){
        return "《厲害了,個人國》";
    }
}

4)暴露HTTP接口ide

/**
 * Create by yster@foxmail.com 2018/6/4/004 18:39
 */
@RestController
public class TicketControllert {
    //輕量級HTTP

    @Autowired
    private TicketService ticketService;

    @GetMapping("/ticket")
    public String getTicket(){
        System.out.println("8001"); //8002
        return ticketService.getTicket();
    }

}

5)而後更改端口,分別打包該模塊爲jar包。運行。微服務

3.服務消費者

【本文版權歸微信公衆號"代碼藝術"(ID:onblog)全部,如果轉載請務必保留本段原創聲明,違者必究。】

  • 新建模塊consumer-user

1)application.yml配置Eureka信息

server:
  port: 8200
spring:
  application:
    name: consumer-user
eureka:
  instance:
    prefer-ip-address: true #註冊服務的時候使用服務的Ip地址
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

2)開啓發現服務的功能,使用負載均衡機制(默認輪詢)

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;

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

    public static void main(String[] args) {
        SpringApplication.run(ConsumerUserApplication.class, args);
    }

    @LoadBalanced /*開啓負載均衡機制*/
    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }

}

3)獲取服務

/**
 * Create by yster@foxmail.com 2018/6/4/004 19:13
 */
@RestController
public class UserController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/buy")
    public String getTicket(){
        String s = restTemplate.getForObject("http://PROVIDER-TICKET/ticket",String.class);
        return "購買了 "+s;
    }
}
  • 啓動服務消費者模塊。查看服務提供者的控制檯打印。
  • 會發現第一次請求8001,第二次8002,8001,8002,,這是由於使用了負載均衡。

版權聲明

【本文版權歸微信公衆號"代碼藝術"(ID:onblog)全部,如果轉載請務必保留本段原創聲明,違者必究】

相關文章
相關標籤/搜索