接上篇,上篇我們實(shí)現(xiàn)了一個(gè) Eureka Server 的服務(wù)功能媳搪,并且能夠運(yùn)行起來(lái)作為我們的注冊(cè)中心。
此篇我們主要關(guān)心兩個(gè)問(wèn)題:
- 如何將我們的注冊(cè)中心(Eureka Server)服務(wù)運(yùn)行在我們指定的地方呢?
- 如何將我們的通用服務(wù)注冊(cè)到我們的注冊(cè)中心(Eureka Server)啄栓?
一撞叽、Eureka Server 打包及運(yùn)行
1.1 Eureka Server 打包
上篇中姻成,我們?cè)?IDEA 中運(yùn)行了我們的 Eureka Server 服務(wù),但是這顯然不適合線上環(huán)境能扒,因?yàn)槲覀兊拇蠖鄶?shù)服務(wù)都是運(yùn)行在 Linux 服務(wù)器上佣渴,并且絕大多數(shù)情況下,我們都是使用無(wú)界面的命令行模式進(jìn)行操作初斑。
因此辛润,這里介紹一個(gè)簡(jiǎn)單打包和運(yùn)行的方式。
- maven 編譯打包
方法一见秤、IDEA maven 打包
Run -> Edit Configuration -> + -> Maven
"Name" 處為此配置起一個(gè)名字砂竖,用于區(qū)分不同配置的打包,無(wú)命名要求鹃答。"Command line" 處填寫(xiě) "clean package" 然后點(diǎn)擊 "OK"
運(yùn)行 Maven 編譯打包
看到控制臺(tái)的日志輸出有錯(cuò)誤信息乎澄," 'repositories.repository.id' must be unique" 原因是 pom.xml 中配置了兩個(gè)重復(fù) id 的 repository,刪除一個(gè)测摔,然后再運(yùn)行編譯打包置济。
編譯打包成功后,可以在項(xiàng)目的系統(tǒng)目錄中的 target 目錄下找到已經(jīng)打包好的 jar 包
方法二锋八、使用 maven 命令行打包
找到項(xiàng)目的系統(tǒng)文件夾根目錄浙于。比如,我的項(xiàng)目的系統(tǒng)目錄位于 D:\ProgramData\workspace\eclipse-workspace\default\eureka
挟纱。從文件系統(tǒng)進(jìn)入該目錄羞酗,在該目錄的地址樣輸入 cmd
并回車(chē),可以看到我們已經(jīng)打開(kāi)了一個(gè) CMD 命令行窗口并且進(jìn)入了 D:\ProgramData\workspace\eclipse-workspace\default\eureka
的工作目錄紊服。然后在此命令窗口中運(yùn)行如下命令(或者點(diǎn)擊 IDEA 中下方的 Terminal 窗口也同理)
mvn clean package
注:
- 默認(rèn)情況下檀轨,我們打包生成的程序包是 .jar 文件
- 使用 maven 命令行打包的方式需要你的操作系統(tǒng)環(huán)境中安裝了自定義的 maven 程序,并配置了環(huán)境變量欺嗤。而 在 IDEA 中直接使用 maven 打包則無(wú)此要求参萄,因?yàn)?IDEA 內(nèi)置了 maven 程序。此處不額外贅述 maven 的安裝與配置煎饼,如果你不會(huì) maven 的安裝與配置拧揽,直接百度或者直接使用方法一打包即可。
1.2 Eureka Server 服務(wù)運(yùn)行
找到我們打包生成的 .jar 文件,你可以把它拷貝到任何你想要放的目錄淤袜,當(dāng)然也可以放到服務(wù)器的文件目錄中痒谴,然后執(zhí)行如下命令即可運(yùn)行
java -jar eureka-0.0.1-SNAPSHOT.jar
注:
- 如果需要使用后臺(tái)運(yùn)行我們的服務(wù),請(qǐng)百度搜索對(duì)應(yīng)平臺(tái)的后臺(tái)運(yùn)行即可铡羡,在此不作贅述积蔚。
二、Eureka Client
2.1 創(chuàng)建一個(gè) Eureka Client 服務(wù)
創(chuàng)建一個(gè) Eureka Client 服務(wù)的過(guò)程與創(chuàng)建 Eureka Server 服務(wù)的過(guò)程十分相似烦周。在此尽爆,作簡(jiǎn)要說(shuō)明
"File" -> "New" -> "Project" -> "Spring Initializr" -> 填寫(xiě)項(xiàng)目信息 -> 選擇組件 -> 填寫(xiě)包名及項(xiàng)目路徑(默認(rèn))-> "finish"
(如果在 "Spring Initializr" 的下一步出現(xiàn)了錯(cuò)誤,請(qǐng)將下方 Default: https://start.string.io
改為 Custom: http://start.string.io
)
至此读慎,一個(gè) Eureka Client 的架子就搭起來(lái)了漱贱。
2.2 項(xiàng)目配置及注意
- 刪除多余目錄
如上一篇中所說(shuō),將 mvnwp 相關(guān)目錄刪除
- pom.xml 配置
在我寫(xiě)這篇文章這天夭委,Spring 發(fā)布了 Finchley 的正式版本幅狮,但由于我們的 Eureka Server 使用的是 Finchley.RC2 版本,因此株灸,我們盡量保持服務(wù)端與客戶端版本一致崇摄。可以都使用 RELEASE 版本或者 RC2 版本(此處慌烧,我使用 RC2 版本逐抑,因?yàn)楸镜赜芯彺娌挥迷傧螺d了... 另外記得添加 repositories)
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.jiangzhuolin</groupId>
<artifactId>eureka-client</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>eureka-client</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.RC2</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
注: 如需要開(kāi)發(fā)一個(gè) Client 端面,基礎(chǔ)的 dependecy 部分請(qǐng)盡量保持與如上的 dependecy 一致屹蚊。
- 項(xiàng)目配置
(1) @EnableDiscoveryClient/@EnableEurekaClient
要使我們的項(xiàng)目能夠成為一個(gè) Eureka Client厕氨,需要給我們的啟動(dòng)入口類添加一個(gè) @EnableDiscoveryClient 注解
package com.jiangzhuolin.eurekaclient;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
@EnableDiscoveryClient
public class EurekaClientApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaClientApplication.class, args);
}
}
注:
- @EnableDiscoveryClient 與 @EnableEurekaClient 這兩個(gè)注解在最新的 spring cloud 版本中已經(jīng)完全分離了,其中 EnableDiscoveryClient 是基于 spring-cloud-commons 組件的汹粤,而 EnableDiscoveryClient 是基于 spring-cloud-netflix 組件命斧,經(jīng)我分析源碼以及測(cè)試來(lái)看,二者在使用 Eureka Server 注冊(cè)中心時(shí)沒(méi)有區(qū)別玄括。而網(wǎng)上部分人說(shuō)的 EnableDiscoveryClient 可以在使用其他注冊(cè)中心時(shí)也可用冯丙,而 EnableEurekaClient 則只針對(duì) Eureka Server 注冊(cè)中心 時(shí)有效肉瓦。此處待驗(yàn)證遭京,源碼地址如下所示:
(2) application.yml 配置
將 resources 下自動(dòng)生成的 application.properties 改為 application.yml 并添加如下配置
spring:
application:
name: client-test
server:
port: 8080
eureka:
client:
service-url:
defaultZone: http://localhost:8000/eureka/
其中:http://localhost:8000/eureka/
對(duì)應(yīng)我們的 Eureka Server 的地址。
2.3 項(xiàng)目運(yùn)行
(1) 運(yùn)行方式一: IDEA 中直接運(yùn)行
右鍵 EurekaClientApplication 類 -> "Run 'EurekaClientApplication...'" 或者 "Run" -> "Run EurekaClientApplication"
IDEA 中運(yùn)行類的方式很多泞莉,此處僅列舉此兩種哪雕。
(2) 運(yùn)行方式二: 命令行運(yùn)行打包文件
項(xiàng)目的打包與運(yùn)行方式與此文前面的打包與運(yùn)行的過(guò)程和方法如出一轍。因此鲫趁,不做詳述斯嚎,請(qǐng)參考前文。
三、總結(jié)
此文分享了如何編譯打包我們的項(xiàng)目堡僻,如何創(chuàng)建一個(gè)Eureka Client 項(xiàng)目糠惫,如何配置一個(gè) Eureka Client 項(xiàng)目以便能將 Eureka Client 注冊(cè)到我們的 Eureka Server 注冊(cè)中心。
問(wèn)題:此處钉疫,有的同學(xué)可能會(huì)發(fā)現(xiàn)一個(gè)問(wèn)題硼讽。我們的 Eureka Server 是我們的服務(wù)注冊(cè)中心,用于注冊(cè)服務(wù)牲阁,發(fā)現(xiàn)服務(wù)等功能固阁。但當(dāng)前我們的 Eureka Server 只有一個(gè)服務(wù),這種情況下如果出現(xiàn)了某些問(wèn)題城菊,比如服務(wù)異常停止备燃,服務(wù)器宕機(jī)... 都有可能導(dǎo)致我們注冊(cè)中心出現(xiàn)問(wèn)題而不能使用。此時(shí)我們只能干瞪眼凌唬?并齐??
針對(duì)這種情況法瑟,前面那些淌水探坑的人肯定已經(jīng)發(fā)現(xiàn)這個(gè)問(wèn)題了冀膝,而這個(gè)問(wèn)題的解決方法就是為 Eureka Server 服務(wù)搭建一個(gè)高可用的服務(wù)集群,至于具體的實(shí)現(xiàn)方式霎挟,請(qǐng)聽(tīng)下回分解N哑省!酥夭!