注冊中心(Eureka/Consul)


基於SpringBoot1.5.4與SpringCloud(Dalston.SR2)的SpringCloud學習博客,轉載請標明出處,O(∩_∩)O謝謝

- Spring Cloud簡介

SpringCloud為開發者提供了在分布式系統中的一些通用的組件(如管理配置、服務發現、斷路器、智能路由、微代理,控制總線,全局鎖,決策競選,分布式會話集群狀態),使用Spring Cloud開發人員可以快速地完成實現這些模式的服務和應用程序。它們在任何分布式環境中都能很好地工作

- Eureka

  1. 是純正的 servlet 應用,需構建成jar/war包部署
  2. 使用了 Jersey 框架實現自身的 RESTful HTTP接口
  3. peer之間的同步與服務的注冊全部通過 HTTP 協議實現
  4. 定時任務(發送心跳、定時清理過期服務、節點同步等)通過 JDK 自帶的 Timer 實現
  5. 內存緩存使用Google的guava包實現

- Eureka Server

該操作只適合IDEA(因為它牛逼)

1.創建項目,選擇Spring Initalizr -> Next

創建項目,選擇Spring Initalizr創建項目,選擇Spring Initalizr

2.填寫項目基本信息 -> Next

填寫項目基本信息填寫項目基本信息

3.Cloud Discovery 選擇當前最新版本(SpringBoot1.5.4),以及創建Eureka Server -> Next

Cloud Discovery 選擇當前最新版本(SpringBoot1.5.4),以及創建Eureka ServerCloud Discovery 選擇當前最新版本(SpringBoot1.5.4),以及創建Eureka Server

4.Maven工程最后一步填寫的東西 -> Finish

Maven工程最后一步填寫的東西Maven工程最后一步填寫的東西

至此項目創建完畢,從項目中可以看到IDEA為我們生成的pom.xml

- pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>

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

- BattcnCloudDiscoveryApplication.java

1
2
3
4
5
6
7
8
@SpringBootApplication
@EnableEurekaServer
public class BattcnCloudDiscoveryApplication {

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

- bootstrap.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server:
port: 8761 #官方寫的就是 8761
spring:
application:
name: battcn-cloud-discovery
cloud:
inetutils:
ignored-interfaces: #忽略docker0網卡以及 veth開頭的網卡
- docker0
- veth.*
preferred-networks: #使用正則表達式,使用指定網絡地址
- 192.168
- 10.0

eureka:
instance:
hostname: localhost #配置主機名
client:
register-with-eureka: false #配置服務注冊中心是否以自己為客戶端進行注冊(配置false)
fetch-registry: false #是否取得注冊信息(配置false)
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#配置eureka客戶端的缺省域(該配置可能沒有提示,請復制或者手動輸入,切勿使用有提示的service-url會引起內置tomcat報錯)

如果開啟Eureka健康檢查

1
2
3
4
eureka:
client:
healthcheck:
enabled: true

官方:(WARNING)eureka.client.healthcheck.enabled=true應該只能設置application.yml。設置值bootstrap.yml將導致不期望的副作用,例如在具有UNKNOWN狀態的eureka中注冊。

官方鏈接:http://cloud.spring.io/spring-cloud-static/Dalston.SR1/#netflix-eureka-client-starter

- 測試

訪問:http://localhost:8761/,看到下圖表示Eureka Server已經運行成功

測試結果測試結果

- Eureka Client

項目創建方式同上,只是選擇上從第二項的 Eureka Server 變成 Eureka Discovery

1.Eureka Client 可以看成是我們一個一個的服務,比如 battcn-cloud-hello , battcn-cloud-order 它都是需要注冊到Eureka中去

- pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

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

- BattcnCloudHelloApplication.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@SpringBootApplication
@EnableEurekaClient
@RestController
public class BattcnCloudHelloApplication {

@Value("${spring.application.name}")
String applicationName;

@RequestMapping("/hello")
public String home(@RequestParam String email) {
return "My Name's :" + applicationName + " Email:" + email;
}

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

- bootstrap.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
server:
port: 8762
spring:
application:
name: battcn-cloud-hello
cloud:
inetutils:
ignored-interfaces: #忽略docker0網卡以及 veth開頭的網卡
- docker0
- veth.*
preferred-networks: #使用正則表達式,使用指定網絡地址
- 192.168
- 10.0
profiles:
active: eureka

---

# eureka 環境(我這里為了偷懶,就丟一個文件和一個項目了,用不同注冊中心,請看博客對應的java代碼)
spring:
profiles: eureka
eureka:
instance:
hostname: localhost #配置主機名
client:
service-url:
default-zone: http://localhost:8761/eureka/ #配置Eureka Server
---

# consul 環境
spring:
profiles: consul
cloud:
consul:
host: localhost
port: 8500
enabled: true
discovery:
enabled: true
prefer-ip-address: true

- 測試

訪問:http://localhost:8762/,看到下圖表示注冊成功

測試結果測試結果代表我們的服務已經注冊成功了

訪問:http://localhost:8762/hello?email=1837307557@qq.com

可以看到:My Name's :battcn-cloud-hello Email:1837307557@qq.com

- Consul

consul是分布式的、高可用、橫向擴展的。consul提供的一些關鍵特性:

service discovery:consul通過DNS或者HTTP接口使服務注冊和服務發現變的很容易,一些外部服務,例如saas提供的也可以一樣注冊。
health checking:健康檢測使consul可以快速的告警在集群中的操作。和服務發現的集成,可以防止服務轉發到故障的服務上面。
key/value storage:一個用來存儲動態配置的系統。提供簡單的HTTP接口,可以在任何地方操作。
multi-datacenter:無需復雜的配置,即可支持任意數量的區域。

總結:只要知道它是解決我上一部分提出的問題就行,其它的東西慢慢理解

- 安裝方式

官網:https://www.consul.io/downloads.html

- Windows

下載方式下載方式

解壓,在當前目錄進入到命令界面輸入 consul agent -dev

啟動Consul啟動Consul

訪問:http://localhost:8500

管理頁管理頁

1.基於consul做注冊中心,服務注冊方式(還是用的battcn-cloud-hello) 只是做了改造

- pom.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

- BattcnCloudHelloApplication.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class BattcnCloudHelloApplication {

@Value("${spring.application.name}")
String applicationName;

@RequestMapping("/hello")
public String home(@RequestParam String email) {
return "My Name's :" + applicationName + " Email:" + email;
}


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

- bootstrap.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
server:
port: 8762
spring:
application:
name: battcn-cloud-hello
cloud:
inetutils:
ignored-interfaces: #忽略docker0網卡以及 veth開頭的網卡
- docker0
- veth.*
preferred-networks: #使用正則表達式,使用指定網絡地址
- 192.168
- 10.0
profiles:
active: consul

---

# eureka 環境(我這里為了偷懶,就丟一個文件和一個項目了,用不同注冊中心,請看博客對應的java代碼)
spring:
profiles: eureka
eureka:
instance:
hostname: localhost #配置主機名
client:
service-url:
default-zone: http://localhost:8761/eureka/ #配置Eureka Server
---

# consul 環境
spring:
profiles: consul
cloud:
consul:
host: localhost
port: 8500
enabled: true
discovery:
enabled: true
prefer-ip-address: true

- 測試

訪問:http://localhost:8500

測試結果測試結果代表我們的服務已經注冊成功了

訪問:http://localhost:8762/hello?email=1837307557@qq.com

可以看到:My Name's :battcn-cloud-hello Email:1837307557@qq.com


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM