8848钛金手机之nacos的注册发现
朋友,你看过那个弥漫着奢华尊贵的8848钛金手机的广告吗?对就是一个光头还有王石代言的那个,可以被制作成多种鬼畜的那个。8848的含义到底是啥?和注册发现服务nacos 又有啥关系?
目录
1.8848的含义
2.什么是nacos
3.nacos的单机安装
4.代码实现服务注册
5.测试服务注册
1
8848的含义
8848钛金手机是北京珠穆朗玛移动通信有限公司于2015年7月28日正式在京发布的一款
手机
8848 是世界最高峰珠穆朗玛峰的高度,懂了吧 ?
2
什么是nacos
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特
性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服
务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
上篇文章开局一张图之SpringCloud微服务架构给大家简单介绍下了SpringCloud的微服务架构,其中就包含服务注册中心,由于eureka 停止更新,而且不用创建工程,nacos 是已经打包好的程序,双击启动。现在Alibaba的nacos成为了不错的选择。
nacos 与8848 啥关系?
没关系,nacos启动时默认8848端口,寓意不断攀登高峰?
nacos 啊,国产之光,阿里美。。。。。你品,细品,是不是有内味了
偏题了。
nacos 官方网站:https://nacos.io/zh-cn/docs/quick-start.html 中文版。
简单粗暴理解,nacos可作为服务注册中心使用,各种服务在此注册登记,主要记录服务的名称,地址等,像114 电话查询平台。当你想联系汽车站订票时,发现不知道号码,你就可以拨打114 进行查询电话号码,查到电话号码后再电话订票。如图。
nacos 不仅仅作为服务注册中心使用,还可以丝滑地作为统一配置中心,后续再介绍。
3
nacos的单机安装
nacos单机单机安装非常简单,双击启动,提供优美UI管理界面。
- nacos下载
https://github.com/alibaba/nacos/releases
要是github下载慢,你可以借助迅雷下载,这个东西还真可以。安装的最新版 window版本,要求
jdk 1.8+
java配置了环境变量JAVA_HOME
- 启动
解压,进入bin 目录,双击 startup.cmd,就OK了,你看它启动像极了apache 2.4 哈。
出现了:
启动成功了。
nacos提供了web管理界面,浏览器打开http://127.0.0.1:8848/
就这样,不需要账号密码,不过安全起见 ,你需要修改nacos的默认账号与密码。
4
代码实现服务注册
注册服务非常简单,3步走。
- 引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 添加注解 @EnableDiscoveryClient
package com.qustdjx.order;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
@EnableDiscoveryClient
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
- 配置
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
application:
name: order
- 启动,就可以看到nacos 的服务列表里已经有了。
#创建order和product 两个服务,
# order 2个实例运行在 7001 ,7002 端口
# product 3个实例运行在6001,6002,6003端口
多实例如何运行请参考:IDEA 下单程序多端口不同配置独立运行
效果如图
5
测试服务注册
下面进行简单测试,使用discoveryClient 获得已注册的服务及某个服务的地址,端口等信息。当然有了服务列表,也可以实现一个随机的自制负载均衡。
- 引入发现客户端
@Autowired
private DiscoveryClient discoveryClient;
- 获取 服务列表
@GetMapping("/services")
public List <String> services(){
return discoveryClient.getServices();
}
运行效果如下,发现服务注册中心有product,order两个服务注册:
- 获得product服务的实例信息
@GetMapping("/instances")
public List <ServiceInstance> instances(){
//List<ServiceInstance> instances = discoveryClient.getInstances("product");
return discoveryClient.getInstances("product");
}
运行效果如下,发现提供prodcut服务的有三个实例,他们的host,port,uri都能获得,调用任意一个product服务都可以。
对高可用系统来说,多个冗余服务,就可以负载均衡了,可以自己实现一个随机负载均衡。
// 自制负载均衡
@GetMapping("/balance/{id}")
public String loadbalance(@PathVariable("id") Integer id){
// String url = "http://127.0.0.1:6001/product/getOne/{id}";
List<ServiceInstance> instances = discoveryClient.getInstances("product");
// 随机获得索引
int instancesIndex = ThreadLocalRandom.current().nextInt(instances.size());
ServiceInstance serviceInstance = instances.get(instancesIndex);
// 拼接地址
String url = serviceInstance.getUri().toString()+"/product/getOne/{id}";
log.info(url);
String res = restTemplate.getForObject(url, String.class,id);
return res;
}
END
- 腾讯云 GAME-TECH 沙龙干货回顾:海外网络拓展及质量把控
- 通过扩展让ASP.NET Web API支持W3C的CORS规范
- 腾讯云GAME-TECH沙龙干货回顾:腾讯游戏云全球化实践
- 腾讯云GAME-TECH沙龙干货回顾:猎豹游戏出海经验分享
- 腾讯云GAME-TECH沙龙干货回顾:绿洲全球化案例分享
- 基于云计算的 CV 移动交互应用研究(1):CV交互+云计算
- ARKit 进阶:物理世界
- HLS 视频点播初探
- 周杰伦读心术背后的技术实现
- 盒子端 CSS 动画性能提升研究
- 把照片唱给你听 :腾讯 AI Lab 国际领先技术邀你「趣」体验
- 因为超算云,你将比别人早10年“抵达”未来
- 网页加速特技之 AMP
- 刷屏的背后:原来腾讯字体是CDC和Monotype联手打造的
- 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 数组属性和方法
- GDAL读取MAIAC的HDF文件(熟肉)
- Google Earth Engine(GEE)-谷歌地球引擎的大致Python入门
- 谷歌地球引擎(Google Earth Engine)之数据初探(栅格和矢量)
- Python-gdal离线文档下载
- 利用python把shp文件写入PostgresSQL数据库
- python调用cmd运行GDAL报错解决:ERROR 1: PROJ
- Tungsten Fabric知识库丨测试2000个vRouter节点部署
- 一行代码快速图像识别~一排代码搞定视频识别
- Python测试开发django5.urls.py参数name与<a>标签的引用
- Pytest配置文件pytest.ini
- 移植uc/OS-III最新版到小熊派开发板(STM32L431)
- phpStudy默认配置致Nginx解析漏洞复现
- HW|蓝队实战溯源反制手册分享
- 工具开发|Burp插件Unexpected_information
- 爱了!安利一个相见恨晚的可视化学习网站