1 微服務模塊功能介紹
1.1 服務治理
服務治理是微服務架構中最為核心和基礎的模塊账忘,它主要用來實現各個微服務實例的自動化注冊和發(fā)現贮折。
Spring Cloud Eureka是Spring Cloud Netflix微服務套件中的一部分粗合,它基于Netflix Eureka做了二次封裝。主要負責完成微服務架構中的服務治理功能。
1.2 服務注冊
在服務治理框架中长赞,通常都會構建一個注冊中心赎离,每個服務單元向注冊中心登記自己提供的服務逛犹,包括服務的主機與端口號、服務版本號梁剔、通訊協議等一些附加信息虽画。注冊中心按照服務名分類組織服務清單,同時還需要以心跳檢測的方式去監(jiān)測清單中的服務是否可用荣病,若不可用需要從服務清單中剔除码撰,以達到排除故障服務的效果。
1.3 服務發(fā)現
在服務治理框架下个盆,服務間的調用不再通過指定具體的實例地址來實現脖岛,而是通過服務名發(fā)起請求調用實現。服務調用方通過服務名從服務注冊中心的服務清單中獲取服務實例的列表清單颊亮,通過指定的負載均衡策略取出一個服務實例位置來進行服務調用柴梆。
2 Demo搭建
2.1 Eureka Server 搭建服務注冊中心
工程結構如下
/src
/main
/java
/com/lerr/baseeureka
BaseEurekaApplication.java
/resources
application.properties
pom.xml
2.1.1 以Maven為例,進行工程依賴配置
- pom.xml (pom.xml引入相關依賴)
<!-- 使用阿里云配置终惑,下載速度可靠 -->
<repositories>
<repository>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
</repository>
</repositories>
<!-- 繼承 spring-boot-starter-parent 一些已有的配置 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.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.SR1</spring-cloud.version>
</properties>
<dependencies>
<!-- 引入 eureka-server表明當前工程是作為服務注冊中心 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</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>
2.1.2 主啟動類绍在,增加注解@EnableEurekaServer,開啟Server能力
- BaseEurekaApplication.java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer //啟動一個服務注冊中心雹有,供其他應用進行對話
@SpringBootApplication
public class BaseEurekaApplication {
public static void main(String[] args) {
SpringApplication.run(BaseEurekaApplication.class, args);
}
}
2.1.3 配置文件配置
由于本身是服務注冊中心偿渡,因此不需要自己向自己注冊,eureka.client.register-with-eureka
因為默認是true
霸奕,所以需要特別注意聲明為false
- application.properties
server.port=1111
eureka.instance.hostname=localhost
# 不向注冊中心注冊自己
eureka.client.register-with-eureka=false
# 注冊中心的職責是維護實例卸察,不需要去檢索服務
eureka.client.fetch-registry=false
2.1.4 啟動工程并訪問
2.2 微服務模塊去注冊中心注冊
工程結構如下
/src
/main
/java
/com/lerr/basemsone
BaseMsOneApplication.java
/resources
application.properties
bootstrap.properties
pom.xml
2.2.1 依賴配置,pom.xml
- pom.xml
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.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.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 如果是具體業(yè)務模塊铅祸,引入eureka-client依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</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>
2.2.2 啟動類配置
@EnableDiscoveryClient //表明去注冊中心注冊
@SpringBootApplication
public class BaseMsOneApplication {
public static void main(String[] args) {
SpringApplication.run(BaseMsOneApplication.class, args);
}
}
2.2.3 配置文件
- application.properties
server.port=8180
- bootstrap.properties
# 設定服務名稱
spring.application.name=ms-one
# 服務注冊中心的地址坑质,告訴應用去這個地方注冊
eureka.client.service-url.defaultZone=http://localhost:1111/eureka/
3 啟動服務注冊中心和微服務
3.1 服務注冊中心頁面截圖
3.2 日志分析
可以看一下微服務模塊的日志合武,表示的是去服務中心注冊
2018-08-20 23:17:05.257 INFO 21816 --- [ main] com.netflix.discovery.DiscoveryClient : Discovery Client initialized at timestamp 1534778225257 with initial instances count: 0
2018-08-20 23:17:05.261 INFO 21816 --- [ main] o.s.c.n.e.s.EurekaServiceRegistry : Registering application ms-one with eureka with status UP
2018-08-20 23:17:05.262 INFO 21816 --- [ main] com.netflix.discovery.DiscoveryClient : Saw local status change event StatusChangeEvent [timestamp=1534778225262, current=UP, previous=STARTING]
2018-08-20 23:17:05.264 INFO 21816 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_MS-ONE/F0R6S7J.SU.intra.cpic.com.cn:ms-one:8180: registering service...
同時看一下服務注冊中心的日志,當有應用過來注冊涡扼,則輸出如下日志
2018-08-20 23:17:05.395 INFO 24168 --- [nio-1111-exec-9] c.n.e.registry.AbstractInstanceRegistry : Registered instance MS-ONE/F0R6S7J.SU.intra.cpic.com.cn:ms-one:8180 with status UP (replication=false)