首先新建父工程
添加依賴如下:
<dependencies>
<!-- spring-cloud-alibab-dependencies -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-cloud-dependencies -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- spring-boot-dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
接着新建提供者模塊依賴於父工程
依賴如下:
<dependencies>
<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.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
</dependencies>
application.yml配置文件如下:
server: port: 56010 spring: application: name: quickstart-provider cloud: nacos: discovery: server-addr: 127.0.0.1:8848 logging: level: root: info org.springframework: info
新建個controller,使用api測試
package com.ckf.nacos.controller; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * @author serene * @date 2020/8/22 16:18 */ @RestController public class ProviderController { private static final Logger logger = LoggerFactory.getLogger(ProviderController.class); @GetMapping("/service") public String service(){ logger.info("provider invoke"); return "provider invoke"; } }
啟動類
package com.ckf.nacos; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; /** * @EnableDiscoveryClient 服務發現客戶端 * @EnableFeignClients feign客戶端 進行遠程調用 * @author: serene * @date: 2020/8/022 16:26 * @description: */ @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class ProviderApplication { public static void main(String[] args) { System.out.println("服務提供者啟動成功"); SpringApplication.run(ProviderApplication.class, args); } }
接着新建消費者模塊依賴於父工程
新建feign客戶端
package com.ckf.nacos.client; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; /**@FeignClient 調用服務的名稱 yml配置文件的服務名 * @author serene * @date 2020/8/22 16:40 */ @FeignClient(value = "quickstart-provider") public interface ProviderClient { /** * 調用服務的方法 * @return */ @GetMapping("/service") public String service(); }
新建controller
package com.ckf.nacos.controller; import com.ckf.nacos.client.ProviderClient; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * @author serene * @date 2020/8/22 16:46 */ @RestController public class ConsumerController { private static final Logger logger = LoggerFactory.getLogger(ConsumerController.class); /** * 動態代理對象,內部遠程調用服務生產者 */ @Autowired private ProviderClient providerClient; @GetMapping("/service") public String service(){ logger.info("consumer invoke"); //遠程調用
String service = providerClient.service(); return "comsumer invoke "+"|"+" + service"; } }
application.yml配置如下:
server:
port: 56020
spring:
application:
name: quickstart-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
logging:
level:
root: info
org.springframework: info
服務消費者啟動類如下:
package com.ckf.nacos; import com.ckf.nacos.controller.ConsumerController; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; /** * @EnableDiscoveryClient 服務發現客戶端 * @EnableFeignClients feign客戶端 進行遠程調用 * @author: serene * @date: 2020/8/022 16:26 * @description: */ @SpringBootApplication @EnableDiscoveryClient @EnableFeignClients public class ConsumerApplication { private static final Logger logger = LoggerFactory.getLogger(ConsumerController.class); public static void main(String[] args) { logger.info("服務消費者啟動成功"); System.out.println("服務消費者啟動成功"); SpringApplication.run(ConsumerApplication.class, args); } }
然后啟動nacos,再啟動服務提供者,就可以看到服務已經注冊上來了。
再啟動服務消費者
這樣nacos的服務提供者與消費者就完成了,如有需要進行調用就好了。
接下來測試多實例負載均衡
首先以傳參的形式定義端口號,這樣在啟動腳本里可以指定具體的端口號。
修改提供者的yml配置文件
在啟動腳本里可以指定端口號(這里創建兩個腳本實現多實例,ProviderApplication1 與 ProviderApplication2)
然后啟動剛修改的兩個腳本,nacos服務列表顯示如下:
由此可以看出有兩個實例了
然后再啟動消費者服務,我們訪問消費者的api
每次啟動在控制台都是以輪回的方式打印(提供者1與提供者2,也就是我們剛創建的啟動腳本)
項目地址:https://gitee.com/ckfeng/nacos-discovery.git