轉載自:https://blog.csdn.net/qq_26323323/article/details/78652849
作者:恐龍弟旺仔
一:構建單節點Eureka服務註冊中心
1.創建Eureka server
1)創建part-1-eureka項目,修改pom.xml文件
<parent>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-parent</artifactId>
<version>Dalston.SR1</version>
<relativePath />
</parent>
<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>
依賴以上parent 、dependencies主要是想使用其版本的Eureka
以下才是最主要的需要依賴的
<dependencies>
<!-- spring-boot-starter-web web項目,集成容器tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- spring-boot-starter-actuator 管理工具/web 查看堆棧,動態刷新配置 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- cloud eureka組件 註冊中心 -->
<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>
</dependency>
</dependencies>
注意:web項目主要是提供對外服務的,actuator主要是提供項目監控的。真正提供Eureka服務的是eureka-server
2)在Application上添加@EnableEurekaServer
@SpringBootApplication
@EnableEurekaServer
public class EurekaApp {
public static void main(String[] args) {
new SpringApplicationBuilder(EurekaApp.class).web(true).run(args);
}
}
3)修改application.properties,設置應用名稱爲part-1-eureka
spring.application.name=part-1-eureka
設置port爲1001
server.port=1001
4)修改application.yml,設置Eureka信息
eureka:
client:
fetch-registry: false # 是否拉取信息
register-with-eureka: false # 是否註冊到eurekaserver
service-url:
defaultZone: http://eureka1:1001/eureka/
server:
wait-time-in-ms-when-sync-empty: 0
enable-self-preservation: true # false 關閉自我保護,不管如何都要剔除心跳檢測異常的服務
instance:
hostname: eureka1
注意:需要設置host文件中eureka1對應的IP地址;不需要將自己註冊到eurekaserver
5)啓動EurekaApp,啓動成功後訪問http://eureka1:1001, 頁面訪問成功即啓動Eurekaserver成功
2.創建Eureka client
6)創建應用part-1-sms-interface
配置pom.xml,需添加eureka client依賴,可以選擇將eureka-server項目part-1-eureka 的maven依賴eureka-server換成以下依賴即可
<!-- cloud eureka組件 客戶端 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
配置application.yml文件
eureka:
client:
registerWithEureka: true
fetchRegistry: true
# eureka server地址
serviceUrl:
defaultZone: http://eureka1:1001/eureka/
instance:
# 心跳間隔
leaseRenewalIntervalInSeconds: 30
instance-id: ${spring.application.name}:${server.port}
注意:defaultZone需要跟server保持一致
7)在Application上添加@EnableEurekaClient
@SpringBootApplication
@EnableEurekaClient
public class SmsInterfaceApp {
public static void main(String[] args) {
new SpringApplicationBuilder(SmsInterfaceApp.class).web(true).run(args);
}
}
注意:此時爲client
8)啓動SmsInterfaceApp,啓動成功後,查看http://eureka1:1001/ 即發現sms應用註冊到Eureka中
3.Java通過註冊中心調用sms服務
9)創建一個新的項目,並註冊到Eurekaserver中,步驟同上
10)在Controller中注入DiscoveryClient對象,並展示其instance,代碼如下
@RestController
@RequestMapping("/web")
public class TestController {
@Autowired
DiscoveryClient discoveryClient; // spring cloud 提供的客戶端工具
@RequestMapping(value="/test", method = RequestMethod.GET)
public String test() throws IOException{
// 調用服務器之前,通過eureka client 查詢服務的實例信息
// 也就是說去看 部署了哪些機器,以及IP 端口等信息
List<ServiceInstance> instances = discoveryClient.getInstances("part-1-sms-interface");
ServiceInstance serviceInstance = instances.get(0);
// 獲取的IP 端口 信息
String host = serviceInstance.getHost();
int port = serviceInstance.getPort();
String result = new RestTemplate().getForObject("http://" + host + ":" + port +"/sms/test", String.class);
return result;
}
}
注意:通過discoveryClient.getInstances方法,獲取服務名對應的host和port信息,然後通過restTemplate來遠程調用該應用
* 需要先在sms應用中添加一個/sms/test對外服務
二:構建高可用Eureka server
Eureka server的服務治理中,每個節點既是服務提供方,也是服務消費方,註冊中心也而不例外
Eureka的高可用實際就是將自己作爲服務向其他註冊中心註冊自己,這樣就形成一組互相註冊的服務註冊中心,以實現服務清單的互相同步,達到高可用效果
1)創建part-1-eureka-ha項目,基本過程同part-1-eureka的創建
2)修改part-1-eureka的application.yml文件
eureka:
client:
# 是否註冊到eurekaserver
registerWithEureka: true
# 是否拉取信息
fetchRegistry: false
# eureka server地址
serviceUrl:
defaultZone: http://eureka2:1002/eureka/
server:
waitTimeInMsWhenSyncEmpty: 0
# false 關閉自我保護,不管如何都要剔除心跳檢測異常的服務
enableSelfPreservation: true
instance:
hostname: eureka1
注意:不同點有兩處:registerWithEureka 修改爲true ;defaultZone修改爲eureka2 也就是part-1-eureka-ha所在的服務器地址
3)修改part-1-eureka-ha的application.yml文件
同樣修改這兩處,defaultZone修改爲eureka1,也就是part-1-eureka所在的服務器地址
eureka:
client:
fetch-registry: false # 是否拉取信息
register-with-eureka: true # 是否註冊到eurekaserver
service-url:
defaultZone: http://eureka1:1001/eureka/
server:
wait-time-in-ms-when-sync-empty: 0
enable-self-preservation: true # false 關閉自我保護,不管如何都要剔除心跳檢測異常的服務
instance:
hostname: eureka2
4)修改兩個項目的Spring.application.name爲相同值,筆者定義爲part-1-eureka
5)啓動兩個server項目
在console可看到註冊成功信息
Registered instance PART-1-EUREKA/eureka1:part-1-eureka:1001 with status UP (replication=false)
DiscoveryClient_PART-1-EUREKA/eureka1:part-1-eureka:1002 - registration status: 204
Registered instance PART-1-EUREKA/eureka1:part-1-eureka:1002 with status UP (replication=true)
訪問http://eureka:1001/
即可發現status 存在兩個狀態爲UP的服務,在GeneralInfo中也可以看到available-replicas看到eureka2的服務
6)註冊項目到HA註冊中心
只需要修改sms項目的application.yml中 defaultZone爲 http://eureka1:1001/eureka/,http://eureka2:1002/eureka即可
---------------------
作者:恐龍弟旺仔
來源:CSDN
原文:https://blog.csdn.net/qq_26323323/article/details/78652849
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!