1~開發准備
JDK:1.8
Spring Boot:1.5.9.RELEASE
Spring Coud:Edgware.RELEASE
IDE:IntelliJ IDEA 2017
Maven:3.3.9
2~創建服務注冊中心
File->New->Projects->Spring Initializr
點擊Next,填寫信息如下:
然后點擊Next,選擇如下:
點擊Next,然后點擊Finish.項目結構如下:
其中pom.xml文件內容如下:
<?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.human</groupId> <artifactId>sbc-service</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>sbc-service</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.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>Edgware.RELEASE</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-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> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
項目初始化完成,修改resources文件夾下application.properties文件,內容如下:
server.port=8081 spring.application.name=human-service eureka.instance.hostname=localhost eureka.client.registerWithEureka=false eureka.client.fetchRegistry=false eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
然后修改主程序代碼如下:
package com.human.sbcservice; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class SbcServiceApplication { public static void main(String[] args) { SpringApplication.run(SbcServiceApplication.class, args); } }
至此,一個微服務注冊中心完成
3~創建微服務提供者
大體上與創建注冊中心相同,在選擇依賴的時候如下圖
選擇完畢,點擊Next,然后點擊Finish,完成后項目結構如圖:
pom.xml代碼如下:
<?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.human</groupId> <artifactId>sbc-user</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>sbc-user3</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.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>Edgware.RELEASE</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <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> </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> </project>
然后打開主程序文件,修改代碼如下:
package com.human.sbcuser; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @EnableDiscoveryClient//Eureka微服務注解 @SpringBootApplication public class SbcUserApplication { public static void main(String[] args) { SpringApplication.run(SbcUserApplication.class, args); } }
修改application.properties文件,內容如下:
server.port=8082 eureka.client.service-url.defaultZone=http\://localhost\:8081/eureka/ spring.application.name=cloud-simple-service
新建一個名為HelloController文件,具體代碼:
package com.human.sbcuser; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class HelloController { @RequestMapping("/") @ResponseBod public String hello() { return "hello KinY ~KoKo"; } }
至此,一個簡單的服務提供者創建完畢
4~創建微服務消費者
利用Rbbon創建客戶端,其中group:com.human,Artifact:sbc-consumer,剩下基本上與創建注冊中心相同,其中選擇依賴時如下圖:
完成后,pom.xml文件內容如下:
<?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.human</groupId> <artifactId>sbc-consumer</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>sbc-service</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.9.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>Edgware.RELEASE</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-eureka-server</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</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> </project>
修改程序主類,內容如下:
package com.human.sbconsumer; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.client.loadbalancer.LoadBalanced; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @EnableDiscoveryClient @SpringBootApplication public class SbcConsumerApplication { @Bean @LoadBalanced RestTemplate restTemplate(){ return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(SbcConsumerApplication.class, args); } }
修改配置文件application.properties,內容如下:
server.port=8083 eureka.client.service-url.defaultZone=http\://localhost\:8081/eureka/ spring.application.name=cloud-simple-consumer
新增HelloController文件,內容如下:
package com.human.sbconsumer; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; 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 HelloController { @Autowired RestTemplate restTemplate; @RequestMapping("/") public String hello() { return restTemplate.getForEntity("http://cloud-simple-service/",String.class).getBody(); } }
至此編碼完成.
5~運行
先運行注冊中心項目(sbc-service),然后運行服務提供者項目(sbc-user),打開瀏覽器輸入地址:http://localhost:8081/,顯示內容如下:
其中紅色框內,說明服務提供者注冊成功,此時訪問地址:http://localhost:8082/ 輸出文本:hello KinY ~KoKo,說明服務提供者正常運行,下面運行服務消費者(sbc-consumer),再訪問http://localhost:8081/ 發現變成如下內容:
說明服務客戶端也成功注冊,下面直接訪問 http://localhost:8083/ 瀏覽器輸出文本:hello KinY ~KoKo 大功告成!!
至此一個簡配的微服務架構搭建完畢.
6~補充
①:在選擇端口時注意不要與其他程序沖突
②:其中消費者基於Ribbon創建,Ribbon是基於http和tcp的客戶端負載均衡器