「拥抱开源」Nacos 实战篇
超级马里奥兄弟,35周年! 库巴,一如既往的迷恋碧奇公主?!
又是一年金九银十。
最近在梳理面试题,发现微服务、服务治理相关的内容还是非常多的。
于是,将国产开源产品 Nacos 研究了下,写了点内容分享给大家。
祝大家在芜湖起飞的时候,更有底气。
01 Nacos 准备
首先启动 Nacos Derby。
$ docker-compose -f example/standalone-derby.yaml up
docker 安装参考上周的「拥抱开源」注册中心 Nacos 。
启动之后,使用浏览器打开 http://localhost:8848/nacos。
使用默认的登录账号:nacos,密码:nacos。
02 Nacos 界面
Nacos 管理界面是一个平平无奇的 HTML。
配置管理
可以将一些敏感的配置信息进行妥善管理,例如:生产数据库的地址账号密码。
服务列表
查看当前在线的微服务信息。
同时提供了服务编辑与上下线功能。
命名空间
提供了自定义命名空间的配置。
集群管控
生产环境可以选择使用3台或3台以上的服务器进行部署。
03 Spring Cloud Nacos
服务的提供者
1. application.yml
指定服务提供者应用的别名,用于服务调用使用。
spring:
application:
name: oPos-center
2. application-dev.yml
配置 Nacos 服务的地址。
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
3. Application.java
增加启用服务发现注解。
@EnableDiscoveryClient
public class Application {
4. EchoController.java
假装提供一个分布式服务,即一个 Get 的请求链接。
@RestController
public class EchoController {
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
public String echo(@PathVariable String str) {
return "Hello Nacos Discovery " + str;
}
}
服务的调用者
1. application.yml
指定服务提供者应用的别名,用于服务调用使用。
spring:
application:
name: oPos-client
2. application-dev.yml
配置 Nacos 服务的地址。
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
3. Application.java
增加启用服务发现注解。
@EnableDiscoveryClient
public class Application {
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
4.HomeController.java
假装提供一个分布式服务,即一个 Get 的请求链接。
@Controller
private final RestTemplate restTemplate;
@Autowired
public HomeController(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
@ResponseBody
@RequestMapping(value = "/echo/{str}", method = RequestMethod.GET)
public String echo(@PathVariable String str) {
return restTemplate.getForObject("http://oPos-center/echo/" + str, String.class);
}
}
最终效果:
通过访问服务调用者,返回服务提供者的消息。
一个简易的分布式服务调用就制作好了。
PS. 完整示例代码,见 https://github.com/FoamValue/oPos.git
04 小结
Nacos 自2018年8月5日开源以来,在社区两年的共同努力之下,获得了13400+ stars,发布了30个版本,吸引了 125 位优秀贡献者。
今天体验下来,发现 1.3.2 版本的 Nacos 基本的核心功能都已经完备,也有成功的生产案例。
让我们下周再见。?
这个周末,又一次成功“强迫”自己学习。
感谢各位小伙伴的阅读,这里是一个技术人的学习与分享。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Kubernetes之RBAC权限管理
- 这是一份 pip 常用命令小结~
- 聊聊claudb的Database
- WebSocket 初识篇
- (一)MessageQueue之消息入队
- 宇智波程序笔记2-kafka 生产发送消息失败无响应,
- 高并发系统三大利器之缓存
- Nuxt.js框架(SSR)学习笔记
- 也谈状态模式
- BFE.dev前端刷题1 - 实现curry()
- BFE.dev前端刷题2 - 实现curry() 并支持placeholder
- TKE集群日志解决方案之日志采集
- Newbe.Claptrap 框架入门,第三步 —— 定义 Claptrap,管理商品库存
- 以 B 站为例,聊聊站内消息系统的设计
- 微信小程序开发实战(22):上传文件和下载文件