nacos
nacos是什么?
Nacos 是阿里巴巴的新开源项目,其核心定位是 “一个更易于帮助构建云原生应用的集注册中心与配置中心于一体的管理平台”。
前面四个字母分别表示 Naming(注册) 和 Configuration(配置) 的前两个字母, 最后一个s 为 Service(服务)
即注册中心与配置中心于一体的管理平台
安装
linux上安装nacos
下载地址:https://github.com/alibaba/nacos/tags
解压即安装
[root@localhost ~]# cd /usr/upload #跳转到upload目录
[root@localhost upload]# rz #上传压缩包
[root@localhost upload]# tar -zxvf nacos-server-1.4.1.tar.gz -C /usr/local #解压即安装
启动:
[root@localhost local]# cd nacos/bin/
[root@localhost bin]# ./startup.sh -m standalone #非集群模式启动
... ...
nacos is starting with standalone
nacos is starting,you can check the /usr/java/nacos/logs/start.out
关闭:
[root@localhost bin]# ./shutdown.sh
The nacosServer(3543) is running...
Send shutdown request to nacosServer(3543) OK
[root@localhost bin]
测试
浏览器访问:http://(安装nacos的端口):8848/nacos,默认用户名/密码为: nacos/nacos
注册中心
为什么使用注册中心?
@RestController
@RequestMapping(value = "/consumer")
public class ConsumerController {
//访问Rest服务的客户端
@Autowired
private RestTemplate restTemplate;
@RequestMapping(value="/getUserById/{id}")
public User getUserById(@PathVariable Integer id){
//调用服务,地址写死了,只能访问一台服务器,无法实现负载均衡,后期修改困难
String url = "http://127.0.0.1:9090/provider/getUserById/"+id;
return restTemplate.getForObject(url, User.class);
}
}
解决:1.地址硬编码 2.不能负载均衡
注册中心主要有三部分组成:
Ø Nacos-Server:注册中心
提供服务的注册和发现。
Ø Nacos-Provider:服务提供方
把自身的服务实例注册到 Nacos Server 中
Ø Nacos-Consumer:服务调用方
通过 Nacos Server 获取服务列表,消费服务。
里面有什么?
存储服务.ip端口
使用步骤
首先引入nacos依赖
<!--nacos客户端-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
其次配置nacos
spring:
cloud:
nacos:
discovery:
server-addr: 192.168.255.132:8848 #nacos服务的地址
application:
name: nacos-provider #向注册中心注册的名字
最后在启动类上开启服务
使用@EnableDiscoveryClient注解
@SpringBootApplication
@EnableDiscoveryClient//向注册中心注册该服务,并可以获取其他服务的调用地址
public class ProviderApp {
public static void main(String[] args) {
SpringApplication.run(ProviderApp.class);
}
}
使用:
先往IOC容器中放入一个Restful风格的工具类
@Configuration
public class ConfigBean {
/**
* 发送rest请求的工具类
* @return
*/
@Bean
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
在服务消费端编写一个controller类
@RestController
@RequestMapping("/consumer")
public