將微服務註冊到Eureka Server 上
註冊到單節點Eureka Server
將編寫如何將微服務註冊到Eureka Server上 先建立一個子模組專案,用來放api介面,然後再建立一個子模組,充當提供者。
在提供者專案的pom檔案中新增依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency>
在提供者專案配置檔案中新增以下配置
server:
port: 8000
spring:
application:
name: provider
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true
server.port 指定專案埠號
spring.application.name 用於指定註冊到Eureka Server 上的應用名稱。
eureka.client.service-url.defaultZone=
euraka.instance.prefer-ip-address=true 表示將自己的ip註冊到Eureka Server,若不配置或者配置false,則表示微服務所有作業系統的hostname到Eureka Server。
在啟動類上添加註解 @EnableEurekaServer
@SpringBootApplication @EnableEurekaServer public class YmkProviderApplication { public static void main(String[] args) { SpringApplication.run(YmkProviderApplication.class, args); } }
在api子模組裡新增一個介面
在提供者子模組裡新增一個控制器,並實現api的介面。
@RestController
public class TestController implements TestService{
@Autowired
private TestService testService;
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello(String name) {
return "Hello "+name;
}
}
可以看到,我們提供者成功的註冊到了Eureka Server中了。
高可用Eureka Server註冊中心
Eureka Server可以通過執行多個例項並相互註冊的方式實現高可用部署,Eureka Server例項彼此同步資訊,從而確保所有節點資料一致。節點之間互相註冊是Eureka Server的預設行為。
因為我們是在一臺電腦上,所以先修改一下hosts檔案,各個作業系統如何修改,還請自行百度。找到hosts後新增 127.0.0.1 peer1 peer2
修改原先Eureka Server專案的 application.yml 檔案修改如下
spring:
application:
name: eureka-server
---
spring:
profiles: peer1 # 指定profile=peer1
server:
port: 8761
eureka:
instance:
hostname: peer1 # 指定當profile=peer1時,主機名是peer1
client:
serviceUrl:
defaultZone: http://peer2:8762/eureka/ # 將自己註冊到peer2這個Eureka上面去
---
spring:
profiles: peer2 # 指定profile=peer2
server:
port: 8762
eureka:
instance:
hostname: peer2 # 指定當profile=peer2時,主機名是peer2
client:
serviceUrl:
defaultZone: http://peer1:8761/eureka/ # 將自己註冊到peer1這個Eureka上面去
通過以上分析,不難理解,我們定義了peer1和peer2兩個Profile,當應用以peer1這個Profile啟動時,配置改Eureka Serber的主機名是peer1,並將其註冊到 http://peer2:8762/eureka/ 上面,反之亦然。
現在我們將專案打包成jar來執行,不再使用idea執行專案。
再idea中直接點選package即可,即可打成jar包
現在通過命令啟動
java -jar /xxx/xx/xxxxx.jar --spring.profiles.active=xxx
通過spring.profiles.active指定啟動哪個profile
比我我的兩個Eureka Server分別是
java -jar /Users/yangmingkai/IdeaProjects/ymk/yang-spring-boot-cloud-parent/ymk-eureka-server/target/ymk-eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer1
java -jar /Users/yangmingkai/IdeaProjects/ymk/yang-spring-boot-cloud-parent/ymk-eureka-server/target/ymk-eureka-server-0.0.1-SNAPSHOT.jar --spring.profiles.active=peer2
我們發現兩個已經互相註冊了。
上面application.yml配置可以簡化一些如下:
spring:
application:
name: eureka-server
eureka:
client:
serviceUrl:
defaultZone: http://peer2:8762/eureka/,http://peer1:8761/eureka/
---
spring:
profiles: peer1
server:
port: 8761
eureka:
instance:
hostname: peer1
---
spring:
profiles: peer2
server:
port: 8762
eureka:
instance:
hostname: peer2
至此高可用Euraka Server 搭建完成!
應用註冊到Eureka Server叢集上
只需要在提供者application.yml配置中修改 eureka: client: serviceUrl: defaultZone 配置多個Eureka Server 地址即可,逗號分隔開來
server:
port: 8000
spring:
application:
name: provider
eureka:
client:
serviceUrl:
defaultZone: http://peer1:8761/eureka/,http://peer2:8761/eureka/
instance:
prefer-ip-address: true
當然即使只配置某一個節點,也能正常註冊到Eureka Server叢集,因為前面說過Eureka Server之間會同步資料。
現在啟動提供者專案
再去Eureka Server中看,就可以看到peer1跟peer2中都註冊了這個服務。