Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它爲基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智能路由、微代理、控制總線、全局鎖、決策競選、分佈式會話和集羣狀態管理等操做提供了一種簡單的開發方式。html
Spring Cloud包含了多個子項目(針對分佈式系統中涉及的多個不一樣開源產品),好比:Spring Cloud Config、Spring Cloud Netflix、Spring Cloud0 CloudFoundry、Spring Cloud AWS、Spring Cloud Security、Spring Cloud Commons、Spring Cloud Zookeeper、Spring Cloud CLI等項目。mysql
微服務(Microservices Architecture)是一種架構風格,一個大型複雜軟件應用由一個或多個微服務組成。系統中的各個微服務可被獨立部署,各個微服務之間是鬆耦合的。每一個微服務僅關注於完成一件任務並很好地完成該任務。在全部狀況下,每一個任務表明着一個小的業務能力。git
微服務的概念源於2014年3月Martin Fowler所寫的章「Microservices」http://martinfowler.com/artic...github
微服務架構的核心思想是,一個應用是由多個小的、相互獨立的、微服務組成,這些服務運行在本身的進程中,開發和發佈都沒有依賴。不一樣服務經過一些輕量級交互機制來通訊,例如 RPC、HTTP 等,服務可獨立擴展伸縮,每一個服務定義了明確的邊界,不一樣的服務甚至能夠採用不一樣的編程語言來實現,由獨立的團隊來維護。簡單的來講,一個系統的不一樣模塊轉變成不一樣的服務!並且服務能夠使用不一樣的技術加以實現!spring
那咱們在微服務中應該怎樣設計呢。如下是微服務的設計指南:sql
因爲Spring Cloud爲服務治理作了一層抽象接口,因此在Spring Cloud應用中能夠支持多種不一樣的服務治理框架,好比:Netflix Eureka、Consul、Zookeeper。在Spring Cloud服務治理抽象層的做用下,咱們能夠無縫地切換服務治理實現,而且不影響任何其餘的服務註冊、服務發現、服務調用等邏輯。數據庫
Spring Cloud Eureka來實現服務治理。編程
Spring Cloud Eureka是Spring Cloud Netflix項目下的服務治理模塊。而Spring Cloud Netflix項目是Spring Cloud的子項目之一,主要內容是對Netflix公司一系列開源產品的包裝,它爲Spring Boot應用提供了自配置的Netflix OSS整合。經過一些簡單的註解,開發者就能夠快速的在應用中配置一下經常使用模塊並構建龐大的分佈式系統。它主要提供的模塊包括:服務發現(Eureka),斷路器(Hystrix),智能路由(Zuul),客戶端負載均衡(Ribbon)等。springboot
提供服務註冊和發現服務器
在項目 lemon-eureka
中引入須要的依賴內容:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency>
經過 @EnableEurekaServer
註解啓動一個服務註冊中心提供給其餘應用進行對話,這個註解須要在springboot工程的啓動application類上加@EnableEurekaServer
@SpringBootApplication @EnableEurekaServer public class LemonEurekaApplication { public static void main(String[] args) { SpringApplication.run(LemonEurekaApplication.class, args); } }
在默認設置下,該服務註冊中心也會將本身做爲客戶端來嘗試註冊它本身,因此咱們須要禁用它的客戶端註冊行爲,只須要在application.yml
配置文件中增長以下信息:
registerWithEureka: false fetch-registry: false
完整配置
server: port: 7001 spring: application: name: lemon-eureka eureka: instance: hostname: eureka7001.com client: registerWithEureka: false fetch-registry: false service-url: defaultZone: http://eureka7001.com:7001/eureka/
啓動工程後,訪問:http://eureka7001.com:7001
能夠看到下面的頁面,其中尚未發現任何服務。
在項目 lemon-dept
中引入須要的依賴內容:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency>
在應用主類中經過加上 @EnableEurekaClient,但只有Eureka 可用,你也能夠使用@EnableDiscoveryClient。須要配置才能找到Eureka註冊中心服務器
@SpringBootApplication @EnableDiscoveryClient public class LemonDeptApplication { public static void main(String[] args) { SpringApplication.run(LemonDeptApplication.class, args); } }
須要配置才能找到Eureka服務器。例:
完整配置
server: port: 8001 mybatis: config-location: classpath:mybatis/mybatis.cfg.xml # mybatis配置文件所在路徑 type-aliases-package: com.github.lemon.entities # 全部Entity別名類所在包 mapper-locations: - classpath:mybatis/mapper/**/*.xml # mapper映射文件 spring: application: name: lemon-dept datasource: type: com.alibaba.druid.pool.DruidDataSource # 當前數據源操做類型 driver-class-name: com.mysql.jdbc.Driver # mysql驅動包 url: jdbc:mysql://localhost:3306/cloudDB01 # 數據庫名稱 username: root password: 123456 dbcp2: min-idle: 5 # 數據庫鏈接池的最小維持鏈接數 initial-size: 5 # 初始化鏈接數 max-total: 5 # 最大鏈接數 max-wait-millis: 200 # 等待鏈接獲取的最大超時時間 eureka: client: #客戶端註冊進eureka服務列表內 service-url: #defaultZone: http://eureka7001.com:7001/eureka defaultZone: http://eureka7001.com:7001/eureka/ instance: instance-id: lemon-dept prefer-ip-address: true #訪問路徑能夠顯示IP地址
其中defaultZone
是一個魔術字符串後備值,爲任何不表示首選項的客戶端提供服務URL(即它是有用的默認值)。
經過spring.application.name
屬性,咱們能夠指定微服務的名稱後續在調用的時候只須要使用該名稱就能夠進行服務的訪問
啓動該工程後,再次訪問啓動工程後:http://eureka7001.com:7001
能夠以下圖內容,咱們定義的服務被成功註冊了。