本次教程旨在爲讀者提供2020版本的最佳實踐方案,使用我認爲最容易學習的組件,可能不少組件有不少替代方案,在這裏不依依講述。本次教程使用的組件以下:html
本次教程整體架構以下:java
Nacos 致力於幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。下載地址github.com/alibaba/nac…linux
下載完成後,解壓,在解壓後的文件的/bin目錄下,windows系統點擊startup.cmd就能夠啓動nacos。linux或mac執行如下命令啓動nacos。git
sh startup.sh -m standalone
複製代碼
登錄頁面:http://localhost:8848/nacos/,登錄用戶nacos,登錄密碼爲nacos。github
本小節工單案例包括2個,一個服務提供者provider 、服務消費者consumer。web
在父pom文件引入相關的依賴,以下:spring
<properties>
<java.version>1.8</java.version>
<spring-boot.version>2.4.4</spring-boot.version>
<spring-cloud.version>2020.0.2</spring-cloud.version>
<spring-cloud-alibaba.version>2020.0.RC1</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- spring boot 依賴 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring cloud 依賴 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring cloud alibaba 依賴 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
複製代碼
在provider的pom文件引入依賴:windows
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
複製代碼
配置文件application.yml:瀏覽器
server:
port: 8762
spring:
application:
name: provider
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
複製代碼
寫一個接口:markdown
@SpringBootApplication
@RestController
@EnableDiscoveryClient
public class ProviderApplication {
public static void main(String[] args) {
SpringApplication.run(ProviderApplication.class, args);
}
@Value("${server.port}")
String port;
@GetMapping("/hi")
public String hi(@RequestParam(value = "name", defaultValue = "forezp",required = false) String name) {
return "hello " + name + ", i'm provider ,my port:" + port;
}
}
複製代碼
在pom文件引入如下依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
複製代碼
須要注意的是引入openfeign,必需要引入loadbalancer,不然沒法啓動。
配置文件:
server:
port: 8763
spring:
application:
name: consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
複製代碼
在工程的啓動文件開啓FeignClient的功能:
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
public class ConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(ConsumerApplication.class, args);
}
}
複製代碼
寫一個FeignClient,去調用provider服務的接口:
@FeignClient(value = "provider" )
public interface ProviderClient {
@GetMapping("/hi")
String hi(@RequestParam(value = "name", defaultValue = "forezp", required = false) String name);
}
複製代碼
寫一個接口,讓consumer去調用provider服務的接口:
@RestController
public class ConsumerController {
@Autowired
ProviderClient providerClient;
@GetMapping("/hi-feign")
public String hiFeign(){
return providerClient.hi("feign");
}
}
複製代碼
啓動兩個工程,在nacos頁面查看,可見2個服務都已經註冊成功:
在瀏覽器上輸入http://localhost:8763/hi-feign,瀏覽器返回響應:
hello feign, i'm provider ,my port:8762
複製代碼
可見瀏覽器的請求成功調用了consumer服務的接口,consumer服務也成功地經過feign成功的調用了provider服務的接口。
其實feign使用了spring cloud loadbanlancer做爲負載均衡器。 能夠經過修改provider的端口,再在本地啓動一個新的provider服務,那麼本地有2個provider 服務,端口分別爲8761 和8762。在瀏覽器上屢次調用http://localhost:8763/hi-feign,瀏覽器會交替顯示:
hello feign, i'm provider ,my port:8762
hello feign, i'm provider ,my port:8761
複製代碼
在此教程中不講述,請參考:www.fangzhipeng.com/springcloud…