服務治理只要負責微服務架構中最爲核心的基礎的模塊,它主要用來實現各個微服務實例的自動註冊與發現。java
搭建服務註冊中心web
1.首先建立一個基礎的Spring boot 工程,命名爲eureka-server,並在pom.xml中引入必要依賴spring
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.4.3.RELEASE</version> <relativePath /> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.7</java.version> </properties> <!-- 引入spring boot依賴 --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!--增長eureka-server的依賴--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies> <!-- 引入spring cloud 依賴 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Brixton.SR5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2.@EnableEurekaServer註解啓動一個微服務註冊中心網絡
@SpringBootApplication @EnableEurekaServer public class EurekaApplication { public static void main(String[] args) { SpringApplication.run(EurekaApplication.class, args); } }
3.在默認配置下,服務註冊中心也會將本身做爲客戶端來註冊它本身,因此咱們須要禁用它的客戶端註冊行爲架構
server.port=1111 #是否將本身註冊到eureka server eureka.client.registerWithEureka=false #是否從eureka server獲取註冊信息 eureka.client.fetchRegistry=false #設置與enreka server交互地址,查詢服務和註冊服務 多個地址,分割 eureka.client.serviceUrl.defaultZone=http://192.168.30.1:8761/eureka
服務提供者 app
1.首先建立一個基礎的Spring boot 工程,命名爲eureka-provider,並在pom.xml中引入必要依賴ide
<!-- 引入spring boot依賴 --> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> </dependencies> <!-- 引入spring cloud 依賴 --> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Brixton.SR5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencyManagement>
2.建立Controller spring-boot
@GetMapping("/{id}") public User findByid(@PathVariable Long id){ User user = userRepository.findOne(id); return user; }
3.@EnableDiscoveryClient 激活@EnableDiscoveryClient實現微服務
@EnableDiscoveryClient @SpringBootApplication public class UserApplication { public static void main(String[] args) { SpringApplication.run(UserApplication.class, args); } }
4.註定配置服務名,指定服務中心地址fetch
server.port=9999 server.ssl.enabled=false spring.application.name=microservice-provider-user
#這能夠配置多個, 逗號分割 eureka.client.serviceUrl.defaultZone=http://192.168.137.100:1111/eureka/
高可用eureka
修改咱們以前建立的eureka工程 ,新建兩個配置application-peer1.properties,application-peer1.properties
server.port=1111 spring.application.name=eureka-server eureka.instance.hostname=peer1 eureka.client.serviceUrl.defaultZone=http://192.168.137.101:1112/eureka eureka.server.enable-self-preservation=false
server.port=1112 spring.application.name=eureka-server eureka.instance.hostname=peer2 eureka.client.serviceUrl.defaultZone=http://192.168.137.100:1111/eureka eureka.server.enable-self-preservation=false
啓動時指定配置文件啓動
nohup java -jar discovery-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1 &
nohup java -jar discovery-eureka-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2 &
這樣兩個eureka就能互相註冊,造成一個雙節點集羣
eureka自我保護模式
當eureka Server 在一段時間內沒有接受到某個微服務實例的心跳,Eureka Server 將會註銷掉該實例(默認90秒)
當網絡分區發生故障時,丟失過多客戶端,那麼這個節點就會進入自我保護模式,一旦進入保護模式,Eureka Server 就會保護服務註冊中心的信息,不在註銷
使用eureka.server.enable-self-preservation=false 禁用自我保護模式