背景 上一文我們講到瞭如何去搭建註冊中心,這一次我們講述如何使用nacos作為註冊中心 spring cloud alibaba basis 創建基礎依賴 首先我們創建一個spring cloud alibaba basis 基礎依賴 工程裡面制定我們要用到的公用的版本 spring boot 版本 ...
背景
上一文我們講到瞭如何去搭建註冊中心,這一次我們講述如何使用nacos作為註冊中心
spring-cloud-alibaba-basis 創建基礎依賴
首先我們創建一個spring-cloud-alibaba-basis 基礎依賴 工程裡面制定我們要用到的公用的版本
- spring boot 版本 2.1.7.RELEASE
- spring cloud 版本 Greenwich.RELEASE
- spring cloud 阿裡巴巴的版本 2.1.0.RELEASE
- Spring IO Platform 版本依賴
<modelVersion>4.0.0</modelVersion>
<groupId>com.xian.cloud</groupId>
<artifactId>spring-cloud-alibaba-basis</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>spring cloud alibaba 總pom</name>
<description>spring cloud alibaba 教程總pom版本控制</description>
<modules>
<module>cloud-discovery-server</module>
<module>cloud-discovery-client-common</module>
</modules>
<!--<parent>-->
<!--<groupId>org.springframework.boot</groupId>-->
<!--<artifactId>spring-boot-starter-parent</artifactId>-->
<!--<version>2.1.7.RELEASE</version>-->
<!--<relativePath/> <!– lookup parent from repository –>-->
<!--</parent>-->
<properties>
<!-- 基本屬性 -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<java.version>1.8</java.version>
<!-- 版本屬性 -->
<spring-cloud-alibaba.version>2.1.0.RELEASE</spring-cloud-alibaba.version>
<spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
<spring-boot.version>2.1.7.RELEASE</spring-boot.version>
<spring-platform.version>Cairo-SR8</spring-platform.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- 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>
<!--支持Spring Boot 2.1.X-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--Greenwich.RELEASE-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--
Spring IO Platform,簡單的可以認為是一個依賴維護平臺,該平臺將相關依賴匯聚到一起,針對每個依賴,都提供了一個版本號
完整的依賴列表 https://docs.spring.io/platform/docs/current/reference/html/appendix-dependency-versions.html
-->
<dependency>
<groupId>io.spring.platform</groupId>
<artifactId>platform-bom</artifactId>
<version>${spring-platform.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 子項目公共依賴的jar包 -->
<dependencies>
<!-- nacos discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
</project>
Spring IO Platform 這個jar包有興趣的同學可以去關註一下他裡面進行了第三方常用jar包的版本管理。每個spring 對應的第三方jar版本都羅列在上面了。這樣方便我們對於第三方jar包的版本管理。#為瞭解決jar包版本衝突而存在
sping boot 除了提供我們熟知的
這樣我們在新建倆個module
服務提供者 cloud-discovery-server
<parent>
<groupId>com.xian.cloud</groupId>
<artifactId>spring-cloud-alibaba-basis</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>cloud-discovery-server</artifactId>
<description>服務提供者</description>
<name>服務提供者</name>
因為我們在父類的pom裡面定義了公共依賴的jar包,所以我們不需要再次引入jar包只需要制定parent pom就可以繼承這些jar包。同樣下麵的消費者服務我也會同樣如此利用maven的jar包傳遞方式進行案例的開發
創建服務啟動類 和對外服務的controller 類
- 啟動類
package com.xian.cloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @Author: xlr
* @Date: Created in 2:44 PM 2019/10/27
*/
@EnableDiscoveryClient
@SpringBootApplication
public class DiscoveryServerApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryServerApplication.class, args);
}
}
- 對外提供服務的http介面
package com.xian.cloud.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @Author: xlr
* @Date: Created in 2:57 PM 2019/10/27
*/
@RestController
@RequestMapping("server")
@Slf4j
public class DiscoverCotroller {
/**
* 對外提供的服務 HTTP介面
* @param name
* @return
*/
@GetMapping("/hello")
public String hello(@RequestParam String name) {
log.info("invoked name = " + name);
return "hello " + name;
}
}
編寫YAML文件
server:
port: 9012
spring:
profiles:
active: dev
application:
name: cloud-discovery-server
cloud:
nacos:
discovery:
server-addr: 47.99.209.72:8848
服務消費者 cloud-discovery-client
<parent>
<artifactId>spring-cloud-alibaba-basis</artifactId>
<groupId>com.xian.cloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>cloud-discovery-client</artifactId>
<name>服務消費者</name>
創建服務啟動類 和調用服務提供者的的controller http介面
- 啟動類
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
/**
* @Author: xlr
* @Date: Created in 3:03 PM 2019/10/27
*/
@EnableDiscoveryClient
@SpringBootApplication
public class DiscoveryClientApplication {
public static void main(String[] args) {
SpringApplication.run(DiscoveryClientApplication.class, args);
}
}
- 消費者服務介面
package com.xian.cloud.controller;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
/**
* @Author: xlr
* @Date: Created in 3:04 PM 2019/10/27
*/
@RequestMapping("client")
@RestController
@Slf4j
public class DiscoveryClientController {
//服務提供者 項目名稱 spring.application.name
public static final String CLOUD_DISCOVERY_SERVER = "cloud-discovery-server";
/**
* 在Spring Cloud Commons中提供了大量的與服務治理相關的抽象介面,包括DiscoveryClient、LoadBalancerClient等。
* 從LoadBalancerClient介面的命名中,是一個負載均衡客戶端的抽象定義
*/
@Autowired
private LoadBalancerClient loadBalancerClient;
@RequestMapping(value = "/test",method = RequestMethod.GET)
public String test() {
ServiceInstance serviceInstance = loadBalancerClient.choose(CLOUD_DISCOVERY_SERVER);
log.info( "ServiceInstance :{}",serviceInstance );
String url = serviceInstance.getUri() + "/server/hello?name=" + "tom";
RestTemplate restTemplate = new RestTemplate();
String result = restTemplate.getForObject(url, String.class);
return "調用 " + url + ", 返回 : " + result;
}
}
編寫YAML文件
server:
port: 9011
spring:
profiles:
active: dev
application:
name: cloud-discovery-client
cloud:
nacos:
discovery:
server-addr: 47.99.209.72:8848
然後啟動服務
查看nacos控制台
顯示倆個服務都已經註冊到了 nacos註冊中心
然後我們就請求http://localhost:9011/client/test 看看是否能夠顯示我們想要的結果
到此時已經完成了我們註冊中心。可以在提供服務者處改變埠是否能進行負載均衡
服務端又分別啟動了 9013、9014倆個埠 服務
再次進行測試http://localhost:9011/client/test
到此時我的註冊中心、負載均衡已經全部實現完畢。
參考資料
示例代碼
如何喜歡可以關註分享本公眾號。
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。轉載請附帶公眾號二維碼