SpringCloudAlibaba-9-nacos集群搭建及使用

前言

Nacos的单节点,也就是我们最开始使用的standalone模式,配置的数据是默认存储到内嵌的数据库derby中。

如果我们要搭建集群的话,那么肯定是不能用内嵌的数据库,不然数据无法共享。集群搭建的时候我们需要将Nacos对接Mysql进行数据存储。

集群模式跟我们平时进行扩容是一样的,可以通过Nginx转发到多个节点,最前面挂一个域名即可,如下图:

内容

1.nacos集群部署方案

  1. 我们开启3个nacos节点,对外提供一个可访问的虚拟ip、3个是通过nginx作为负载均衡
  2. 我们微服务通过注册到1111实现到3个节点,3个节点连接到同一个数据库mysql数据源,实现数据的统一

2.修改启动脚本

修改启动脚本,支持自定义端口,自带的startup.cmd不具备更改端口功能,我们通过修改脚本实现上面三个节点及不同的端口。
nacos默认有个问题,就是默认启动时候端口8848是没有定义的,如果我们想修改成:1111,2222,3333等就需要扩展我们的启动脚本。

3.修配置cluster文件

拷贝cluster.conf.example为:cluster.conf。填写如下信息:

SpringCloudAlibaba-8-nacos配置中心持久化

持久化从嵌入式数据库Derby数据库转为mysql
有时候,我们需要将nacos的配置参数持久化到数据库。

在目录:nacos\distribution\target\nacos-server-1.2.0-SNAPSHOT\nacos\conf下有nacos-mysql.sql数据库脚本

然后重启服务,我们进去之后发现什么配置文件都没有

我们先创建一个配置文件:test.yml

此时数据库里面:

我们修改nacos的test.yml文件的配置文件

我们查看nacos控制台历史版本(从数据库his_config_info读取信息)


title: SpringCloudAlibaba-7-nacos配置文件共享规则
date: 2020-01-30 13:19:26
tags:

SpringCloudAlibaba

nacos配置文件共享

1.为什么需要配置文件共享?

比如我们定义了一个application.yml文件,其他微服务全部依赖于此配置文件。比如:feign的一些参数、超时、可能所有微服务配置的时间都是一样的,但是每个微服务都有一个个性化的配置。因此需要一个通用的和个性化的配置文件。在微服务nacos里面的额客户端里面需要同时加载,那么nacos也对这种情况进行了支持-shared-dataIds。

2.实现同时加载2个配置文件

  1. 1.nacos控制台创建common.yml文件
    除了一个以:application为名称的yml文件外,我们再创建一个common.yml文件

  2. 2.在配置文件中添加如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
spring:
application:
name: nacos-config-client-load
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yml
namespace: 83aa3869-684c-43af-919a-74bcceea120b
shared-dataids: common.yml
server:
port: 8056
```
重启服务:
Loading nacos data, dataId: 'common.yml', group: 'DEFAULT_GROUP'
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='nacos-config-client-load.yml'}, NacosPropertySource {name='common.yml'}]}
以上具备data id 所以我们进行测试:
测试:http://127.0.0.1:8056/test/config
返回结果:
common-DEFAULT_GROUP.yml
以上是我们没有应用配置文件:${application}.yml,现在我们在NS租户下创建nacos-config-client-load.yml
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/49.png)
再次请求:http://127.0.0.1:8056/test/config
返回结果:
NS-nacos-config-client-load.yml
#### 3.配置group
上面所有情况都是我们没有配置group参数进行的一些验证,现在我们配置group
1. 1.bootstrap.yml配置

spring:
application:
name: nacos-config-client-load
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yml
namespace: 83aa3869-684c-43af-919a-74bcceea120b
shared-dataids: common.yml
group: alibaba
server:
port: 8056

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2. 2.nacos控制台配置
nacos控制台新增group为alibaba的common.yml
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/50.png)
我们测试:http://127.0.0.1:8056/test/config
返回:
common-DEFAULT_GROUP.yml
这个其实是SpringCloudAlibaba的一个问题:
对于共享文件,他只传递了租户(namespace),并没有把我们的配置group传递过去
#### 4.公共配置文件刷新
当我们修改common.yml文件里面的test属性值时候,我们在浏览器测试 访问时候,其test对应的值是没有刷新的,此时我们需要添加共享文件的另一个属性值:refreshable-dataids: common.yml
#### 5.ext-config
上面共享文件读取传递属性值时候,只是传递了namespace属性值,没有传递group属性值,那么有没有另外的解决方案呢?(注意: ext-config是一个list)

spring:
application:
name: nacos-config-client-load
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yml
namespace: 83aa3869-684c-43af-919a-74bcceea120b
group: alibaba

#shared-dataids: common.yml
#refreshable-dataids: common.yml
ext-config:
  - data-id: common.yml
    group: alibaba
    refresh: true

server:
port: 8056

1
2
3
4
5
6
7
8
9
10
11
12
重启服务后:
Loading nacos data, dataId: 'common.yml', group: 'alibaba'
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='nacos-config-client-load.yml'}, NacosPropertySource {name='common.yml'}]}
测试后返回:alibaba-NS-common.yml
#### 6.ext-config与其他配置共存
nacos控制台配置的文件为:
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/51.png)
bootstrap.yml配置文件为:

spring:
application:
name: nacos-config-client-load
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yml
namespace: 83aa3869-684c-43af-919a-74bcceea120b
group: alibaba
ext-config:

  - data-id: common.yml
    group: alibaba
    refresh: true
shared-dataids: common.yml

server:
port: 8056
```

重启后日志:
Loading nacos data, dataId: ‘common.yml’, group: ‘DEFAULT_GROUP’
Loading nacos data, dataId: ‘common.yml’, group: ‘alibaba’

由于后加载的配置文件会覆盖前面加载的配置文件;所以我们测试访问时候,返回结果为:
alibaba-NS-common.yml

SpringCloudAlibaba-6-nacos配置文件加载顺序

前言

上一节中我们简单实用nacos作为配置中心,实现了简单配置文件读取和实时刷新,本节主要讲解nacos配置文件的加载顺序。

内容

当你有多个生命周期的配置文件时候,如何去加载,哪个先去加载,怎么去区分不同的环境。

1.profile

新建工程:nacos-config-client-load并将其配置到父工程的model里面.然后重新工程发现加载

1
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='nacos-config-client-load-dev.yml'}, NacosPropertySource {name='nacos-config-client-load.yml'}]}

通过上面的启动日志我们知道,除了加载:nacos-config-client-load-dev.yml还会加载:nacos-config-client-load.yml

我们此时搜索data id发现控制台确实没有输出,这个说明我们在nacos配置文件是没有创建

我们创建

此时我们请求:
http://127.0.0.1:8056/test/config
结果:
nacos-config-client-load-dev.yml

如果我们删除nacos-config-client-load-dev.yml
应用控制台会打印日志:nacos-config-client-load-dev.yml

此时我们请求:
http://127.0.0.1:8056/test/config
结果:
nacos-config-client-load.yml

结论:

  • 优先使用配置是 applicationname-profile
  • 不存在时读取 applicationname

2.GROUP

2.1 简介
  1. 1.我们创建的配置文件,里面都有一个组的概念:Group,我们没有输入时候默认都是:DEFAULT_GROUP
  2. 2.组的概念主要是为了让我们创建的配置文件属于同一个组里面,各个应用之间的隔离都是可以通过这个属性来配置
  3. 3.那么我们怎样去声明加载哪一个组呢?
    我们在配置文件添加group属性,group默认属性是:DEFAULT_GROUP
2.2 实践
  1. 1.修改bootstrap.yml配置文件
    我们在配置文件中添加group属性,其值为:alibaba
    此时重启服务时候发现其加载的data id不存在,访问:
    http://127.0.0.1:8056/test/config输出结果是'空test
    原因是我们在配置中心没有添加 组为:alibaba的配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
spring:
application:
name: nacos-config-client-load
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yml
group: alibaba
server:
port: 8056
```
2. 2.nacos控制台创建alibaba组下配置文件
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/41.png)
此时控制台打印出:
oading nacos data, dataId: 'nacos-config-client-load.yml', group: 'alibaba'
测试:访问:http://127.0.0.1:8056/test/config
返回结果:nacos-config-client-load-alibaba.yml
#### 3.namespace
更深层次隔离:namespace
namespace-命名空间,在nacos里面简称租户
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/42.png)
##### 3.1 实践
1. 1.在nacos控制台创建命名空间
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/43.png)
2. 2.在bootstrap.yml配置文件添加属性:namespace

spring:
application:
name: nacos-config-client-load
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yml
namespace: NS
server:
port: 8056
```

此时重启服务发现我们没有产生data id
因为我们没有在nacos控制台创建NS下的配置文件

  1. 3.在nacos控制台下的NS命名空间下创建对应的配置文件

我们此时在控制台搜索data id发现还是没有对应文件生成。

  1. 4.我们修改下配置文件中namespace为命名空间ID

测试:
http://127.0.0.1:8056/test/config
返回:
nacos-config-client-load-NS.yml

SpringCloudAlibaba-5-nacos配置中心快速使用

前言

我们之前介绍了nacos作为注册中心,实现服务的注册与发现,这里主要介绍nacos作为配置中心

内容

nacos作为配置中心

1.实践

nacos服务注册和配置中心是两个不同的依赖模块,可以单独各自引入依赖

1.引入依赖
1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.配置

我们需要修改appliaction.yml文件为bootstrap.yml文件,不然会报空指针异常错误。bootstartp.yml文件是会在application.yml文件加载前加载。保证初始化的bean能够提前获取到一些属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
spring:
application:
name: nacos-config-client
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
server:
port: 8055
```
##### 3.在nacos配置列表中创建properties文件
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/31.png)
##### 4.创建controller测试
我们已经创建了配置中心,我们看通过配置是否可以获取到值
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/32.png)
我们发现我们能够获取到以上的值
##### 5.修改controller注解,然后修改配置列表看是否实时生效
现在我们修改下配置中心里面的配置:
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/33.png)
我们再次通过页面访问以上接口:
http://127.0.0.1:8055/test/config
结果:
yxm
我们修改值时候并没有实时刷新,所以我们在controller加上注解:@RefreshScope;然后重启服务。
即可实现以上实时刷新功能。
我们修改properties文件时候,idea的页面下回刷新出以下信息:

Refresh keys changed: [test]

1
2
3
4
5
6
##### 6.yml文件配置加载
nacos默认加载:properties文件,是通过一个属性:file-extension
现在我们改成:yml文件
bootstrap.yml文件:

spring:
application:
name: nacos-config-client
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yml
server:
port: 8055

1
2
3
4
5
6
7
8
9
10
11
12
13
14
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/34.png)
创建:nacos-config-client.yml配置文件
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/35.png)
访问后得到:
yml-test
##### 7.Data ID
Data ID组成:spring.application.name+file-extension
我们从nacos的文档里面可以知道data id是由:应用名称+profiles+file-extension

spring:
application:
name: nacos-config-client
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
file-extension: yml
profiles:
active: dev
server:
port: 8055
```

我们可以知道我们创建的配置文件在应用启动后默认加载:应用名称+profiles+file-extension 文件

然后我们创建:

我们测试:
http://127.0.0.1:8055/test/config
结果返回:
dev-yxm


title: SpringCloudAlibaba-4-nacos服务注册与发现整合spring-cloud-gateway调用
date: 2020-01-27 13:12:39
tags:

SpringCloudAlibaba

前言

我们前几节主要介绍了nacos注册中心实现服务之间的互相调用,我们这一节通过讲解nacos作为注册中心实现服务路由转发功能。

内容

1.Gateway

2.本节简介

使用SpringCloud GateWay实现如下功能:

1.浏览器通过gateway(8054)端口访问到:provider(8051)服务
2.需要通过网关请求到provider服务,需要使用:LoadBalancerClient Filter

实现如下:

  1. 1.创建项目:nacos-discovery-gateway-server
  2. 2.修改pom.xml:去除spring-boot-starter-web和spring-boot-starter-test,引入:
1
2
3
4
5
6
7
8
9
<!--gateway 网关依赖,内置webflux 依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
```
3. 3.父工程里面添加: <module>nacos-discovery-gateway-server</module>
4. 4.配置gateway路由策略

spring:
application:
name: nacos-discovery-gateway-server
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
routes:

- id: nacos-discovery-provider
  uri: lb://nacos-discovery-provider
  predicates:
    - Path=/hello

server:
port: 8054

1
2
3
4
5
6
7
8
9
10
11
5. 5.测试:
http://127.0.0.1:8054/hello?name=123
返回:Hello 123 port:8051
以上说明通过8054的网关访问到了8051的provider服务
6. 6.默认情况下:
我们访问:http://127.0.0.1:8054/provider/hello就可以访问到:http://127.0.0.1:8054/hello,所以我们访问某个微服务时候不能每次都配置一个路由前缀,需要我们统一管理:
方法一:我们通过配置context-path作为微服务路由前缀;比如配置nacos-discovery-provider服务的context

//设置nacos-discovery-gatewayr的application.yml
spring:
application:
name: nacos-discovery-gateway-server
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
gateway:
routes:

- id: nacos-discovery-provider
  uri: lb://nacos-discovery-provider
  predicates:
    - Path=/provider

//设置nacos-discovery-provider的context-path
server:
port: 8051
servlet:
context-path: provider

1
2
3
4
方法二:
我们跳过前缀的第一个uri

spring:
application:
name: nacos-discovery-gateway-server
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
metadata:
name: lengleng
gateway:
routes:

- id: nacos-discovery-provider
  uri: lb://nacos-discovery-provider
  predicates:
    - Path=/provider/**
  filters:
    - StripPrefix=1

```


title: ‘SpringCloudAlibaba-3-nacos服务注册与发现整合feign:webflux调用’
date: 2020-01-26 22:36:11
tags:

SpringCloudAlibaba

1.Feign

Feign是从Netflix中分离出来的轻量级项目,能够在类接口上添加注解,成为一个RES API客户端。

2.OpenFegin

Spring Cloud在netflix feign的基础上扩展了支持Spring MVC注解,并通过自动配置为Spring Boot应用程序提供快速集成。

3.使用Fegin

1.复制nacos-discovery-consumer项目,修改maven坐标及其在父工程里面添加module即可。
2.在nacos-discovery-consumer-fegin引入fegin依赖

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

3.开启feign

1
2
3
4
5
6
7
8
9
10
11
12
13
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class NacosDiscoveryConsumerFeignApplication {
public static void main(String[] args) {
SpringApplication.run(NacosDiscoveryConsumerFeignApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}

4.nacos-discovery-consumer-fegin调用nacos-discovery-provider

a.创建feign的cient端口,并且其是nacos-discovery-provider的调用接口

接口:HelloFeignService

1
2
3
4
5
6
7
8
9
//FeignClient注解里面填写的是provider服务名称
@FeignClient("nacos-discovery-provider")
public interface HelloFeignService {
@GetMapping("/hello")
String hello(@RequestParam("name") String name);
}
```
类:TestController

@RestController
public class TestController {
@Autowired
private HelloFeignService helloFeignService;
@GetMapping(“/test”)
public String test(String name){
return helloFeignService.hello(name);
}
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
测试:
http://127.0.0.1:8052/test?name=111
返回:
Hello 111 port:8051
### 4.webflux
webflux是和Spring-webmvc进行的对比,如下:
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/26.png)
步骤:
1. 1.引入webflux的依赖
我们创建nacos-discovery-consumer-webflux;
修改里面的pom.xml文件:


org.springframework.boot
spring-boot-starter-web

1
2
为:


org.springframework.boot
spring-boot-starter-webflux

1
2
3
2. 2.创建WebClient.Builder(类似于mvc中的restTemplate)

@EnableDiscoveryClient
@SpringBootApplication
public class NacosDiscoveryConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosDiscoveryConsumerApplication.class, args);
}
@Bean
@LoadBalanced
public WebClient.Builder webClientBuilder(){
return WebClient.builder();
}
}

1
2
3. 3.Controller中调用

@RestController
public class TestController {
@Autowired
private WebClient.Builder webClientBuilder;
@GetMapping(“/test”)
public Mono test(String name){
return webClientBuilder.build()
.get()
.uri(“http://nacos-discovery-provider/hello?name=“ + name)
.retrieve()
.bodyToMono(String.class);
}
}
```


title: SpringCloudAlibaba-2-nacos负载均衡、服务上下线、权重元信息
date: 2020-01-26 17:55:33
tags:

SpringCloudAlibaba

1.nacos服务上下线

我们通过nacos管理首页点击:下线

2.nacos负载均衡

nacos默认已经集成了ribbon作为负载均衡

实现负载均衡,修改2点:
1.consumer调用provider时候,我们直接改为服务名调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@RestController
public class TestController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping("/test")
public String test(String name){
return restTemplate.getForObject("http://nacos-discovery-provider/hello?name="+name, String.class);
}
}
```
2.RestTemplate添加注解(RestTemplate支持LoadBalanced):

@EnableDiscoveryClient
@SpringBootApplication
public class NacosDiscoveryConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosDiscoveryConsumerApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}

1
2
3
4
5
6
3.再启动一个provider(8052)
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/22.png)
然后分别启动:8051、8052
测试:

curl ‘http://127.0.0.1:8050/test?name=qaws

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/23.png)
### 3.权重设置
我们在nacos的控制台可以设置nacos负载provider的权重,类似于nginx的流量分配,权重越大,访问到此服务的可能性越大。
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/24.png)
### 4.元数据
通过nacos的管理台,我们点击进去provider详情可以看到元数据
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/25.png)
很多时候我们会把一份代码一个微服务部署多个节点,多个节点的内容代码是一致的,通过一些元数据获取服务信息来区分这个微服务,可以通过这些描述信息做一些流量迁移。比如同一个微服务中A节点流量大一点,B节点流量少一点,通过这个元数据做区别
我们如何在代码里面获取元数据呢?
通过RibbonServer

@GetMapping(“/test”)
public String test(String name){
RibbonLoadBalancerClient.RibbonServer ribbonServer = (RibbonLoadBalancerClient.RibbonServer) loadBalancerClient.choose(“nacos-discovery-provider”);
NacosServer nacosServer = (NacosServer) ribbonServer.getServer();
Map metadata = nacosServer.getMetadata();
System.out.println(“—>”+metadata);
return restTemplate.getForObject(“http://nacos-discovery-provider/hello?name="+name, String.class);
}
```

输出:
—>{name=provider1}

参考:
https://my.oschina.net/giegie

SpringCloudAlibaba-1-nacos服务注册与发现

组件说明

  1. 服务注册与发现:适配Spring Cloud服务注册与发现标准,默认集成了Ribbon的支持
  2. 服务限流降级:默认支持servlet、Feign、RestTemplate、Dubbo和RocketMQ限流降级接入,可以在运行时通过控制台实时修改限流配置规则,还支持查看限流降级Metrics监控。
  3. 分布式配置管理:支持分布式系统中的外部化配置,配置更改时自动刷新。
  4. 消息驱动能力:基于Spring Cloud Stream 为微服务应用构建消息驱动能力。
  5. 分布式事务:使用@GlobalTransactional注解,高效并且对业务零侵入地解决分布式事务问题。
  6. 阿里云对象存储:阿里云提供海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
  7. 分布式任务调度:提供秒级、精准、高可靠、高可用的定时(基于Cron表达式) 任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有Worker(schedulerx-client)上执行。
  8. 阿里云短信服务:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建客户触达通道。

nacos

nacos=eureka+Spring Cloud Config

1.下载运行nacos

下载地址:
https://github.com/alibaba/nacos/releases
也可参考:https://nacos.io/en-us/docs/quick-start.html

2.服务注册与发现实例


运行3个实例:8050、8051注册到nacos上面

2.1创建父工程

1.创建工程

2.修改pom.xml

2.2 创建consumer工程

添加相关依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!--依赖版本定义-->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Greenwich.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.2.1.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

再次添加:

1
2
3
4
5
6
7
8
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
```
添加Application服务发现客户端

@EnableDiscoveryClient
@SpringBootApplication
public class NacosDiscoveryConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosDiscoveryConsumerApplication.class, args);
}
}

1
2
3
application.yml

spring:
application:
name: nacos-discovery-consumer
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
server:
port: 8050

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
先启动nacos
https://nacos.io/en-us/docs/quick-start.html
然后输入:http://127.0.0.1:8848/nacos/
查看服务列表:
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/17.png)
##### 2.3 创建provider工程
类似的我们创建nacos-discovery-provider工程,并添加对应配置
![](https://raw.githubusercontent.com/startshineye/img/master/2020/01/18.png)
##### 2.4 让consumer去调用provider
1. 1.provider创建HelloController

@RestController
public class HelloController {
@GetMapping(“/hello”)
public String hello(String name){
return “Hello “+name;
}
}

1
2
2. 2.provider创建HelloController

@RestController
public class TestController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private LoadBalancerClient loadBalancerClient;
@GetMapping(“/test”)
public String test(String name){
ServiceInstance serviceInstance = loadBalancerClient.choose(“nacos-discovery-provider”);
URI uri = serviceInstance.getUri();
return restTemplate.getForObject(uri+”/hello?name=”+name, String.class);
}
}
//NacosDiscoveryConsumerApplication注入:RestTemplate
@EnableDiscoveryClient
@SpringBootApplication
public class NacosDiscoveryConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(NacosDiscoveryConsumerApplication.class, args);
}
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
```

3.测试
http://127.0.0.1:8050/test?name=qaws
结果返回:
Hello qaws

毕业于<br>相信技术可以改变人与人之间的生活<br>码农一枚