spring cloud 學習(一) 服務註冊與發現
最近開始學習spring cloud,
跟著這個學:http://blog.didispace.com/spring-cloud-starter-dalston-1/
以下是我抄的定義:
Spring Cloud是一個基於Spring Boot實現的雲應用開發工具,它為基於JVM的雲應用開發中涉及的配置管理、服務發現、斷路器、智慧路由、微代理、控制匯流排、全域性鎖、決策競選、分散式會話和叢集狀態管理等操作提供了一種簡單的開發方式。
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等專案。
一 .服務中心
有兩種方法,一種是使用Spring Cloud Eureka,另一種是使用Spring Cloud Consul。
前者保證高可用後者保證強一致性
https://www.zhihu.com/question/55749122/answer/313757969
然後來撘框架吧
建立maven專案 eureka-server
pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId >
<version>1.5.6.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
啟動類
通過@EnableEurekaServer註解啟動一個服務註冊中心提供給其他應用進行對話
@EnableEurekaServer
@SpringBootApplication
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(Application.class)
.web(true).run(args);
}
}
在預設設定下,該服務註冊中心也會將自己作為客戶端來嘗試註冊它自己,所以我們需要禁用它的客戶端註冊行為,只需要在application.properties配置檔案中增加如下資訊:
spring:
application:
name: eureka-server
server:
port: 1001
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
註冊中心完成,下面來看服務提供者
pom
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
實現/dc請求處理介面,通過DiscoveryClient物件,在日誌中打印出服務例項的相關內容。
@RestController
public class DcController {
@Autowired
DiscoveryClient discoveryClient;
@GetMapping("/dc")
public String dc() {
String services = "Services: " + discoveryClient.getServices();
System.out.println(services);
return services;
}
}
啟動項
@EnableDiscoveryClient註解,該註解能啟用Eureka中的DiscoveryClient實現,這樣才能實現Controller中對服務資訊的輸出。
@EnableDiscoveryClient
@SpringBootApplication
public class Application {
public static void main(String[] args) {
new SpringApplicationBuilder(
Application.class)
.web(true).run(args);
}
}
配置檔案
spring:
application:
name: eureka-client
server:
port: 2001
eureka:
client:
serviceUrl:
defaultZone: http://localhost:1001/eureka/
上面顯示的紅字這裡還不知道什麼原因,會有什麼影響
這裡先標記下解決方案。
1.https://www.cnblogs.com/breath-taking/articles/7940364.html
2.https://blog.csdn.net/lc0817/article/details/54375802
也可以通過直接訪問eureka-client服務提供的/dc介面來獲取當前的服務清單,只需要訪問:http://localhost:2001/dc,我們可以得到如下輸出返回:
下面來實現Spring Cloud Consul
先去官網安裝服務中心
https://www.consul.io/downloads.html
啟動
consul agent -dev
在瀏覽器開啟http://localhost:8500/ui/#/dc1/services
修改eureka的pom
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
修改配置檔案
spring:
application:
name: consul-client
cloud:
consul:
host: localhost
port: 8500
server:
port: 2002
啟動就可以在服務中心發現自己的服務了