Eureka
何為 Eureka矾芙?
簡單來說Eureka 就是一個服務(wù)管理中心假抄。
思考:在現(xiàn)實的開發(fā)邏輯中隧出,我們把所有的邏輯通通都寫到一個工程下踏志,那么我們的項目會成什么樣子?成千上萬個Java文件都在一個目錄下胀瞪,各種資源文件堆疊在一起针余,這就像把不同年級的學(xué)生都統(tǒng)一到一個超大的教室上課;這就對我們的項目管理造成了很大的困難凄诞,甚至是阻礙圆雁,那么能不能把邏輯拆分以下,projectA 負(fù)責(zé)一部邏輯帆谍,ProjectB 負(fù)責(zé)一部分邏輯伪朽、projectC ……,然后讓各個邏輯之間能夠互相調(diào)用汛蝙、通信烈涮!但管理有事相互獨立的;就像一個企業(yè)窖剑,有人事部坚洽、財務(wù)部、研發(fā)部西土、銷售部和董事會……
那么讶舰,Eureka 就是各個部門相互通信的基站!它負(fù)責(zé)各個project間的聯(lián)絡(luò)與通信!
代碼實現(xiàn)步驟:
- 新建Eureka服務(wù)中心
- 新建App1
- 新建App2
目的:使 App1跳昼、App2 能相互通信般甲!
1. 創(chuàng)建Eureka服務(wù)中心
01 idea 創(chuàng)建一個maven Java項目 EurekaService!導(dǎo)入如下依賴:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
02 創(chuàng)建resources/application.properties 配置文件庐舟,并添加如下配置:
#啟動端口改為 8761
server.port=8761
# 關(guān)閉默認(rèn)注冊到eureka服務(wù)中心(該項目本身就是服務(wù)中心欣除,無需自己注冊自己)
eureka.client.register-with-eureka=false
# 關(guān)閉自動抓取服務(wù)端,該工程本身就是服務(wù)端
eureka.client.fetch-registry=false
03 創(chuàng)建啟動類 person.jack.eureka/EurekaService
package person.jack.eureka;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer /**聲明該啟動是一個Eureka服務(wù)端*/
public class EurekaService {
public static void main(String[] args) {
new SpringApplicationBuilder(EurekaService.class).web(true).run(args);
}
}
# 運行main() 方法挪略,啟動Eureka服務(wù)端
……
瀏覽器訪問:http://localhost:8761
# 進入Eureka 首頁
……
# 停止服務(wù)
2. 創(chuàng)建Eureka 客戶端工程AppOne
01 創(chuàng)建一個maven java 工程AppOne,導(dǎo)入如下依賴:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
</dependencies>
02 創(chuàng)建啟動類历帚,person.jack/Appone:
package person.jack;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class AppOne {
public static void main(String[] args) {
new SpringApplicationBuilder(AppOne.class).web(true).run(args);
}
}
03 創(chuàng)建person.jack.controller/HelloController:
package person.jack.controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@ResponseBody
@RequestMapping(value = "/sayMesg/{word}")
public String sayMesg(@PathVariable String word){
return "你傳了一個:" + word ;
}
}
04 添加配置文件application.properties:
# 應(yīng)用名稱
spring.application.name=AppOne
# eureka服務(wù)端地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
05 啟動Eureka 服務(wù)端EurekaService、啟動客戶端AppOne
# 觀察服務(wù)端是否正常啟動
……
# 觀察AppOne 是否能正常啟動
……
06 啟動成功后杠娱,訪問服務(wù)端:http://localhost:8761/
Instances currently registered with Eureka
Application | AMIs | Availability Zones | Status |
---|---|---|---|
APPONE | n/a (1) | (1) | UP (1) - LAPTOP-TJDLNJHK:AppOne |
AppOne 成功注冊到Eureka服務(wù)中心
創(chuàng)建第二個客戶端AppTwo
- 新建第二個客戶端AppTwo,相關(guān)依賴同Appone相同:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Dalston.SR5</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
</dependencies>
- 創(chuàng)建application.properties:
# 應(yīng)用名稱
spring.application.name=AppTwo
# eureka服務(wù)端地址
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
- pom.xml 新加入依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
- 創(chuàng)建啟動類 person.jack/AppTwo
package person.jack;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
@SpringBootApplication
@EnableEurekaClient
public class AppTwo {
public static void main(String[] args) {
new SpringApplicationBuilder(AppTwo.class).web(true).run(args);
}
}
- 創(chuàng)建配置工具類 person.jack.config/MyConfig挽牢,將RestTemplate 配置到IOC容器:
package person.jack.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@Configuration
public class MyConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
- 創(chuàng)建 person.jack.controller/AppTwoHello
package person.jack.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
public class AppTwoHello {
@Autowired
private RestTemplate restTemplate;
@ResponseBody
@RequestMapping("/getAppOneMesg/{mesg}")
public String getAppOneMesg(@PathVariable String mesg){
String strMesg=restTemplate.getForObject("http://APPONE/sayMesg/" + mesg, String.class);
return "訪問App2,從App1 收到信息:“"+strMesg+"“";
}
}
- AppTwo 代碼編寫完成!依次啟動EurekaService摊求、AppOne禽拔、AppTwo
# 注意觀察服務(wù)是否成功啟動
調(diào)用測試
- 訪問Eureka 服務(wù)中心: http://localhost:8761/
頁面打印
Instances currently registered with Eureka
Application | AMIs | Availability Zones | Status |
---|---|---|---|
APPONE | n/a (1) | (1) | UP (1) - LAPTOP-TJDLNJHK:AppOne |
APPTWO | n/a (1) | (1) | UP (1) - LAPTOP-TJDLNJHK:AppTwo:8081 |
現(xiàn)在,Eureka服務(wù)中心已經(jīng)有了兩個應(yīng)用了室叉!
- 訪問 http://localhost:8081/getAppOneMesg/hello 睹栖,測試是否能連通AppOne
# 頁面打印
訪問App2,從App1 收到信息:“你傳了一個:hello“
# 訪問成功!AppTwo 成功連通茧痕、并調(diào)用AppOne
測試成功野来!第一個Euraka 環(huán)境搭建完成!