SpringCloud(一):註冊中心Eureka、feign(簡單微服務搭建)
1.Eureka簡介
Eureka是Netflix開源的一款提供服務註冊和發現的產品,它提供了完整的Service Registry和Service Discovery實現。也是springcloud體系中最重要最核心的元件之一。
Eureka是一個服務註冊和發現模組,採用了 C-S 的設計架構。Eureka Server 作為服務註冊功能的伺服器,它是服務註冊中心。而系統中的其他微服務,使用 Eureka 的客戶端連線到 Eureka Server,並維持心跳連線。這樣系統的維護人員就可以通過 Eureka Server 來監控系統中各個微服務是否正常執行。Spring Cloud 的一些其他模組(比如Zuul)就可以通過 Eureka Server 來發現系統中的其他微服務,並執行相關的邏輯。
Eureka由三個角色組成:
1)Eureka Server
- 提供服務註冊和發現
2)Service Provider
- 服務提供方
- 將自身服務註冊到Eureka,從而使服務消費方能夠找到
3)Service Consumer
- 服務消費方
- 從Eureka獲取註冊服務列表,從而能夠消費服務
2.建立註冊中心 Eureka Server
1)可以通過瀏覽器開啟SpringBoot專案初始化工具新建SpringBoot專案,也可以通過IDEA建立,本文通過網址建立
通過瀏覽器開啟https://start.spring.io/,選擇編開發語言、SpringBoot版本、專案名稱等資訊。
填好之後點選 Generate Project alt+,生成專案壓縮包,解壓縮之後通過eclipse匯入專案。
2)匯入專案之後在pom.xml中新增依賴Eureka,如果提示缺失版本號,再新增SpringCloud版本號,最終如下:
<?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.su</groupId>
<artifactId>sbc-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>sbc-server</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.3.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>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Camden.SR6</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>
</project>
3)配置application.properties
spring.application.name=register-server
server.port=9999
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
4)啟動程式碼中新增@EnableEurekaServer註解
@EnableEurekaServer
@SpringBootApplication
public class SbcServerApplication {
public static void main(String[] args) {
SpringApplication.run(SbcServerApplication.class, args);
System.out.println("註冊中心啟動成功-------------------------");
}
}
3.建立服務提供方
1)建立SpringBoot專案demo1,建立過程以及pom.xml檔案與註冊中心類似
2)配置application.properties,指明註冊中心地址埠號等
spring.application.name=demo1
server.port=8091
eureka.instance.hostname=localhost
eureka.client.serviceUrl.defaultZone=http://localhost:9999/eureka/
3)啟動程式碼中新增@EnableEurekaServer註解
@SpringBootApplication
@EnableEurekaServer
public class DemoNameApplication {
public static void main(String[] args) {
SpringApplication.run(DemoNameApplication.class, args);
System.out.println("demo1啟動成功----------------------");
}
}
4)提供服務
@RestController
public class HelloWordController {
@RequestMapping(value="/hello",method=RequestMethod.GET)
public String sayHello(@RequestParam String name){
return "hello "+name+",welcome to demo1";
}
}
4.建立服務消費方
1)建立SpringBoot專案demo2,建立過程以及pom.xml檔案與註冊中心類似,需要新增feign依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
</dependency>
2)配置application.properties,指明註冊中心地址埠號等
spring.application.name=demo2
server.port=8092
eureka.instance.hostname=localhost
eureka.client.serviceUrl.defaultZone=http://localhost:9999/eureka/
3)啟動類中新增@EnableEurekaServer @EnableFeignClients註解
@SpringBootApplication
@EnableEurekaServer
@EnableFeignClients
public class Demo2Application {
public static void main(String[] args) {
SpringApplication.run(Demo2Application.class, args);
System.out.println("demo2啟動成功----------------------");
}
}
4)提供消費入口
@RestController
public class ConsumerController {
@Autowired
HelloRemote HelloRemote;
@RequestMapping("/hello/{name}")
public String sayHello(@PathVariable("name") String name) {
return HelloRemote.sayHello(name);
}
}
5)提供消費介面,@FeignClient註解定義了該介面是一個Feign客戶端,name指定了註冊到Eureka上的服務名,demo1為上面服務提供方註冊的服務名。通過@ FeignClient(“服務名”),來指定呼叫哪個服務。比如在程式碼中呼叫了demo1服務的“/hello”介面,程式碼如下
@FeignClient(name= "demo1")
public interface HelloRemote {
@RequestMapping(value="/hello",method=RequestMethod.GET)
public String sayHello(@RequestParam(value="name") String name);
}