安装Nacos
推荐使用官网教程进行安装,也可以直接使用我的docker安装教程
接入Nacos注册中心
服务提供者
第一步:创建SpringBoot应用(模块),命名为alibaba-nacos-discovery-server。
第二步:编辑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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>alibaba-nacos-discovery-server</artifactId><version>0.0.1-SNAPSHOT</version><packaging>jar</packaging><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>11</java.version><spring-boot.version>2.3.7.RELEASE</spring-boot.version><spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version><spring-cloud.version>Hoxton.SR9</spring-cloud.version></properties><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><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><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><dependencies><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.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>
注意SpringBoot与SpringCloud的版本需要对应,否则会无法启动,点击这里查看版本对应关系。
第三步:创建主类,实现一个Http接口
package com.example.demo;import lombok.extern.slf4j.Slf4j;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;@EnableDiscoveryClient@SpringBootApplicationpublic class AlibabaNacosDiscoveryServerApplication {public static void main(String[] args) {SpringApplication.run(AlibabaNacosDiscoveryServerApplication.class, args);}@Slf4j@RestControllerstatic class TestController {@GetMapping("/echo/{message}")public String hello(@PathVariable String message){log.info("invoke message = {}", message);return "[echo] : " + message;}}}
@SpringBootApplication定义SpringBoot应用,@EnableDiscoveryClient开启SpringCloud的服务注册与发现。
第四步:编辑application.properties,配置服务名称和Nacos地址
spring.application.name=alibaba-nacos-discovery-serverserver.port=8001spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
第五步:启动应用。
在应用启动好之后,可以在控制台看到如下内容,说明注册成功:
INFO 18826 --- [ main] c.a.c.n.registry.NacosServiceRegistry : nacos registry, DEFAULT_GROUP alibaba-nacos-discovery-server 192.168.31.174:8001 register finished
启动好之后,可以在Nacos管理页面http://127.0.0.1:8848/nacos的「服务管理」-「服务列表」看到刚注册的服务:
服务消费者
第一步:创建SpringBoot应用(模块),命名为alibaba-nacos-discovery-client-common。
第二步:编辑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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>alibaba-nacos-discovery-client-common</artifactId><version>0.0.1-SNAPSHOT</version><name>alibaba-nacos-discovery-client-common</name><description>Demo project for Spring Boot</description><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><java.version>11</java.version><spring-boot.version>2.3.7.RELEASE</spring-boot.version><spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version><spring-cloud.version>Hoxton.SR9</spring-cloud.version></properties><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><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><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><dependencies><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.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>
第三步:创建主类,实现一个Http接口
package com.example.alibabanacosdiscoveryclientcommon;import lombok.AllArgsConstructor;import lombok.extern.slf4j.Slf4j;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.ServiceInstance;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.client.loadbalancer.LoadBalanced;import org.springframework.cloud.client.loadbalancer.LoadBalancerClient;import org.springframework.context.annotation.Bean;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.client.RestTemplate;@EnableDiscoveryClient@SpringBootApplicationpublic class AlibabaNacosDiscoveryClientCommonApplication {public static void main(String[] args) {SpringApplication.run(AlibabaNacosDiscoveryClientCommonApplication.class, args);}@Slf4j@RestControllerstatic class RestTemplateController {@LoadBalanced@Beanpublic RestTemplate restTemplate() {return new RestTemplate();}@Autowired@LoadBalancedprivate RestTemplate restTemplate;@GetMapping("call/echo/{message}")public String callEcho(@PathVariable String message) {// 已经注册的应用的名称String serverName = "alibaba-nacos-discovery-server";String url = "http://"+ serverName +"/echo/" + message;return restTemplate.getForObject(url, String.class);}}}
这里使用RestTemplate向实例发起HTTP请求,定义RestTemplate的时候,使用@LoadBalanced注解,这样在调用服务接口时,只需要拼接上实例名称和请求路径。而SpringCloud会通过负载均衡选出具体的节点来执行请求。
第四步:编辑application.properties,配置服务名称和Nacos地址
spring.application.name=alibaba-nacos-discovery-client-commonserver.port=9001spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
第五步:启动服务消费者,然后通过curl发起访问:
$ curl http://localhost:9001/call/echo/something[echo] : something%
代码示例
- Github:
- Gitee:
