球友好,欢迎来到 Nacos 这一篇。如果要考试划重点的话,我觉得此篇是重中之重。目前来说,在国内,注册中心和配置中心都是通过 Nacos 来完成的。
所以,学习本篇对实际上手工作(即便不是微服务)有很大的帮助。
前言
我们先来看一个问题,在单体应用中,所有的接口都打包成了一个 jar 包,然后放到服务器上去部署。这个时候,接口都是放在 controller 里面,一个接口要调另外一个接口,需要引入 service,然后通过 service 来调用。(不会AxxController 直接调用BxxController)。
很好理解,对吧?也就是说单体内部如果需要调来调去就需要注入 service。
如果 service 需要调用外部服务呢?
我想有经验的你肯定会说,那还不简单,直接 http 调用呗,写上对方服务的 url,然后发起 post 请求或者 get 请求,等待响应结果就好了呀。比如下面这串代码:
public class BaiduTranslateExample {
public static void main(String[] args) throws Exception {
// 请替换为您的AppID和密钥
String appId = "YOUR_APP_ID";
String secretKey = "YOUR_SECRET_KEY";
// 待翻译的文本
String query = "Hello world";
// 翻译源语言和目标语言
String from = "en";
String to = "zh";
// 随机数salt
String salt = String.valueOf(new Random().nextInt(10000));
// 签名计算: sign = MD5(appid+q+salt+密钥)
String sign = md5(appId + query + salt + secretKey);
// 构造参数
String params = "q=" + URLEncoder.encode(query, StandardCharsets.UTF_8)
+ "&from=" + from
+ "&to=" + to
+ "&appid=" + appId
+ "&salt=" + salt
+ "&sign=" + sign;
// Baidu翻译API地址
String url = "https://fanyi-api.baidu.com/api/trans/vip/translate";
// 使用HttpClient发送POST请求
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.header("Content-Type", "application/x-www-form-urlencoded")
.POST(HttpRequest.BodyPublishers.ofString(params))
.build();
// 发送请求并获取响应
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
// 解析返回的JSON数据
if (response.statusCode() == 200) {
JSONObject json = new JSONObject(response.body());
if (json.has("trans_result")) {
// 提取翻译结果
String result = json.getJSONArray("trans_result").getJSONObject(0).getString("dst");
System.out.println("翻译结果: " + result);
} else {
System.out.println("翻译失败: " + response.body());
}
} else {
System.out.println("请求失败,HTTP状态码: " + response.statusCode());
}
}
注意,这里的 URL 需要写死。
那假设哪天百度翻译改了 URL 地址(虽然不大可能),我们是不是还得修改代码?那你可能要说,做成配置呀。
大哥,改个配置相当麻烦。(尤其是大厂,改线上配置的流程贼繁琐)
这是调用外部服务的例子, 假设调用的服务就是我们系统内部的,是个微服务,服务名变了,服务的 URL 也变了,有没有不用改代码和配置的办法呢?
当然有,那就是通过注册中心来完成。
什么是注册中心呢?
你可以这样理解,注册中心就好比是整个微服务体系中服务的通讯录,****它记录了服务和服务地址的映射关系。
Nacos 的核心功能之一就是可以用来充当注册中心。
Nacos 的第二核心能力呢?
就是起到分布式配置中心的作用。很好理解,原先在本地 application.yml 中的配置,通通都可以放到 Nacos 配置中心去,改个配置,不用重启服务,妈妈再也不用担心我服务重启了,多省事呀。
好了,我花了大量篇幅来给你说明白两个事:
1、在分布式系统中,注册中心很有必要,而 Nacos 就是系统中服务的通讯录
2、Nacos 还可以充当微服务的配置中心。
那下面进入正篇。
什么是 Nacos?
不知道你有没有和我一样的癖好,看到一个名字,总喜欢去思考名字背后的故事和意义。
就好比 PmHub,我们就赋予了他不一样的寓意和故事,感兴趣的可以自行在之前的文章中了解哈。
Nacos 有什么寓意呢?
Nacos: Dynamic Naming and Configuration Service
翻译过来就是:动态命名和配置服务
前四个字母分别为 Naming 和 Configuration 的前两个字母,最后的 s 为 Service
不难理解,对应的其两大核心功能:服务注册和配置。
Nacos 是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。这是他的官网:https://nacos.io/
很有科技感的背景,可以说是国产之光了。
用一句话总结下:Nacos 就是注册中心+配置中心的组合。
额外补充一点知识,不同注册中心的比较,这里苍何做了下总结:
服务注册与发现框架 | CAP模型 | 控制台管理 | 社区活跃度 |
---|---|---|---|
Eureka | AP | 支持 | 低 (2.x版本闭源) |
Zookeeper | CP | 不支持 | 中 |
Consul |
|
1 条评论
回复