Nacos笔记【配置中心】和【服务发现】

一、配置中心

1. Nacos配置中心的三大抽象概念

命名空间Namespace:代表不同环境,如开发、测试、生产环境,命名空间ID可以唯一标识这个命名空间
配置分组Group:代表某项目,如XX医疗项目、XX电商项目
配置集DataID:每个项目下往往有多个工程,每个配置集(DataID)是一个工程(微服务)的主配置文件,每个配置集DataID中包含的一个个配置内容就是配置项,比如连接数据库的参数配置、日志项配置等

在这里插入图片描述

注意事项:

  1. 在编写程序获取配置集时,如果没有指定命名空间,那么会默认指向保留的命名空间public
  2. 不同命名空间是互相隔离的,创建相同Group、相同DataID也互不影响

2. 应用端程序获取指定命名空间下的配置信息

String serverAddr = "127.0.0.1:8848"; //IP+端口
String namespace = "d8fuhs-8dfdfjd-8udd-8df99";
String group = "DEFAULT_GROUP";
String dataId = "nacos-simple-demo.yml";
Properties properties = new Properties();
properties.put("serverAddr", serverAddr);
properties.put("namespace", namespace);
ConfigService configService = NacosFactory.createConfigService(properties);
//获取配置并输出控制台
String content = configService.getConfig(dataId, group, 5000);
System.out.println(content);

3. 配置管理

(1) 批量处理配置文件:

① 导入导出:将dev命名空间下的配置文件导出到文件夹,然后将其导入到pro命名空间

② 克隆:将dev命名空间下的配置文件克隆到pro命名空间

(2) 对历史版本进行回滚
(3) 监听查询:应用端添加监听器
configService.addListener(dataId, group, new Listener() {
	public Executor getExecutor() {
		return null;
	}
	//当配置文件有变化时,获取通知
	public void receiveConfigInfo(String s) {
		System.out.println(s);
	}
});

4. Nacos配置管理应用于分布式系统

(1) 从单体架构到微服务架构
单体架构微服务架构
特点虽是模块化逻辑,但最终会打包部署为单体式应用,所有功能都会部署在一个web容器中运行将原先巨大的单体式应用分解为各个完成特定功能的微服务,每一个微服务都是完整应用,都有自己的业务逻辑和数据库
优点开发效率高,模块之间交互采用本地方法调用,节省了微服务之间的交互和开发成本易于开发、理解和维护,方便团队的拆分和管理,分而治之,职责单一
容易测试,在本地就可以启动完整的系统局部容易修改,容易替换,容易部署,有利于持续集成和快速迭代
容易部署,运维成本小,直接打包成一个完整的包,拷贝到web容器中某个目录即可运行能够单独的对指定的服务进行伸缩,不受限于任何技术栈
缺点复杂性和可维护性逐渐变高,所有业务模块部署在一起,牵一发而动全身
版本迭代速度变慢,修改一个地方需要将整个应用全部编译、部署、启动时间过长
不方便进行功能伸缩
(2) 分布式应用配置管理结构

在这里插入图片描述

(3) 分布式应用配置管理

① 在Nacos服务发现中心发布配置

在这里插入图片描述
② 创建父工程

③ 微服务service1配置:bootstrap.yml

由于使用外部配置中心,需创建bootstrap.yml,并且bootstrap.yml的加载顺序是优先于application.yml的,bootstrap.yml中的内容如下所示:

在这里插入图片描述
④ 微服务service2配置(和service1类似)

⑤ 支持配置的动态更新

//注入配置文件上下文
@Autowired
private ConfigurableAapplicationContext applicationContext;

@GetMapping(value = "/configs")
public String getConfigs() {
	return applicationContext.getEnvironment().getProperty("common.name");
}

⑥ 自定义扩展的DataId配置(可以让多个微服务读取一些公共的DataId配置集)
在这里插入图片描述
⑦ 配置的优先级

在这里插入图片描述
⑧ 完全关闭配置

cloud:
	nacos:
		config:
			enabled: false #关闭配置 

5. Nacos配置管理-集群部署

(1) 安装3个以上Nacos

可以复制之前解压好的nacos文件,分别命名为nacos1、nacos2、nacos3

(2) 配置集群配置文件

所有nacos目录的conf目录下,有文件cluster.conf.example,将其命名为cluster.conf,并将每行配置成ip:port(请配置3个以上)

# ip:port
127.0.0.1:8848
127.0.0.1:8849
127.0.0.1:8850
(3) 分别执行nacos目录下的bin目录下的startup:
startup -m cluster
(4) 启动后效果如下:

在这里插入图片描述

(5) 客户端配置的方式
方式一:客户端配置多个Nacos服务中心(IP+端口号)

在这里插入图片描述

方式二(官方推荐方式):域名+虚拟IP的形式,该种方式下当Nacos集群迁移时,客户端配置无需修改

在这里插入图片描述

二、服务发现

1. 服务发现的定义

在微服务架构中,各个服务之间会通过协作来实现业务目标,免不了要进行服务的远程调用,服务的消费方要调用服务的生产方,为了完成一次请求,消费方需要知道服务生产方的网络位置(IP地址和端口号)

2. SpringCloud服务协作流程

SpringCloud常见的集成方式是使用Feign+Ribbon技术来完成服务远程调用及负载均衡。

在这里插入图片描述

整体流程如下
微服务将自己的地址注册到Nacos服务发现中心,发现中心会维护微服务的注册表,当服务消费方需要调用服务生产方时,就可以从服务发现中心获取到服务生产方的地址,来进行远程调用。

(1) 负载均衡

就是将用户请求通过一定的策略,分摊在多个服务实例上执行,能够处理高并发、缓解网络压力和实现服务端扩容,主要可以分为服务端负载均衡客户端负载均衡

Nginx - 服务端负载均衡
Ribbon - 客户端负载均衡

(2) 服务调用Feign

① 声明Feign客户端

@FeignClient(value = "serviceB")
public interface ServiceBAgent {
	@GetMapping(value = "/service")
	public String service();
}

② 业务调用

@Autowired
private ServiceBAgent serviceBAgent;
//...略
serviceBAgent.service();
//...略

3. Nacos服务发现入门案例

服务生产者

(1) 服务生产者的application

在这里插入图片描述

(2) Provider(生产者)服务实现
@RestController
public class ProviderController {
	@GetMapping("/service")
	public String service() {
		return "provider invoke";
	}
}
(3) 启动生产者
@SpringBootAapplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosProviderApp {
	public static void main(String[] args) {
		SpringApplication.run(NacosProviderApp.class, args);
	}
}

服务消费者

(1) 服务消费者的application

在这里插入图片描述

(2) 生产者的远程代理
@FeignClient(name = "quickstart-provider")
public interface ProviderClient {
	@GetMapping("/service")
	String service();
}
(3) 消费者服务实现
@RestController
public class ConsumerController {
	@Autowired
	private ProviderClient providerClient;
	@GetMapping("/service")
	public String service() {
		String providerResult = providerClient.service();
		return "consumer invoker" + "|" + providerResult; 
	} 
}
(4) 启动消费者
@SpringBootAapplication
@EnableDiscoveryClient
@EnableFeignClients
public class NacosConsumerApp {
	public static void main(String[] args) {
		SpringApplication.run(NacosConsumerApp.class, args);
	}
}

4. 测试多实例负载均衡

(1) application中设置动态参数

在这里插入图片描述

(2) 启动配置中的VM options

在这里插入图片描述

(3) 启动两个实例后,Nacos服务发现中心的信息

在这里插入图片描述

在这里插入图片描述

5. 指定命名空间和配置分组

之前的例子没有指定,默认是在public命名空间中的DEFAULT-GROUP分组中,下面给出如何自己指定位置

在这里插入图片描述

6. Spring Cloud Alibaba 综合集成架构

在这里插入图片描述

7. 网关gateway-zuul

作用一:路由转发,手机这个客户端需要访问许多微服务,每一个服务的实例都有一个地址,客户端就需要记住很多地址,很不方便。但是有了网关之后,客户端只需要记住网关这一个地址,由网关把请求转发到各个微服务。

作用二:过滤,拦截不合法请求。

(1) bootstrap.yml

在这里插入图片描述

(2) 在Nacos中的配置

在这里插入图片描述

(3) 网关服务启动类

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天`南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值