1.为什么需要注册中心

  1.1 没有注册中心会怎么样

  1.2 注册中心提供什么功能以及解决什么问题

2.常用的微服务注册中心对比

3.案例项目父工程

4.nacos作为注册中心的使用

  4.1 单机版的使用

  4.2 linux环境nacos集群部署

5.nacos注册中心原理

------------------------------------------------

1.为什么需要注册中心

1.1 没有注册中心会怎么样

  微服务首先要解决是就是服务间的通信问题。而通信则需要知道ip和端口及暴露相应的接口。在单体应用中,直接写死ip和端口并拼接对应的暴露接口即可。而在服务应用中,需要考虑的是存在大量服务时手动维护服务列表是否合适?如果服务横向扩展时如何通知其他的服务?服务宕机后,如何及时下线等等问题。没有注册中心,这些都需要应用自己实现。

1.2 注册中心提供什么功能以及解决什么问题

  注册中心提供服务注册与发现功能:动态的增减服务节点,服务节点增减后动态的通知服务消费者,而不需要由消费者来更新配置。

2.常用的微服务注册中心对比

   Nacos PMC 朱鹏飞的主流微服务注册中心浅谈与对比一文,从数据模型、数据一致性、负载均衡、健康检查、性能与容灾、易用性及集群扩展性等方面,比较全面的对当下主流的注册中心zk、consul、Eureka、nacos作了比较,详细可点以上链接地址。

3.案例项目父工程

为了方便之后springcloud alibaba系统案例的开发,先弄一个父pom工程,统一版本号及相关maven插件。

具体pom如下,modules根据对应案例工程作相应更改。

  1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5 <modelVersion>4.0.0</modelVersion>
6
7 <groupId>cn.com.wjqhhuaxia</groupId>
8 <artifactId>springcloud-alibaba</artifactId>
9 <version>1.0-SNAPSHOT</version>
10 <modules>
11 <module>nocas-provider</module>
12 <module>nocas-consumer</module>
13 </modules>
14 <packaging>pom</packaging>
15
16 <!-- 统一管理jar包版本 -->
17 <properties>
18 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
19 <maven.compiler.source>1.8</maven.compiler.source>
20 <maven.compiler.target>1.8</maven.compiler.target>
21 <junit.version>4.12</junit.version>
22 <log4j.version>1.2.17</log4j.version>
23 <lombok.version>1.16.18</lombok.version>
24 <mysql.version>5.1.47</mysql.version>
25 <druid.version>1.1.16</druid.version>
26 <mybatis.spring.boot.version>1.3.0</mybatis.spring.boot.version>
27 </properties>
28
29 <!-- 子模块继承之后,提供作用:锁定版本+子modlue不用写groupId和version -->
30 <dependencyManagement>
31 <dependencies>
32 <!--spring boot 2.2.2-->
33 <dependency>
34 <groupId>org.springframework.boot</groupId>
35 <artifactId>spring-boot-dependencies</artifactId>
36 <version>2.2.2.RELEASE</version>
37 <type>pom</type>
38 <scope>import</scope>
39 </dependency>
40 <!--spring cloud Hoxton.SR1-->
41 <dependency>
42 <groupId>org.springframework.cloud</groupId>
43 <artifactId>spring-cloud-dependencies</artifactId>
44 <version>Hoxton.SR1</version>
45 <type>pom</type>
46 <scope>import</scope>
47 </dependency>
48 <!--spring cloud alibaba 2.1.0.RELEASE-->
49 <dependency>
50 <groupId>com.alibaba.cloud</groupId>
51 <artifactId>spring-cloud-alibaba-dependencies</artifactId>
52 <version>2.1.0.RELEASE</version>
53 <type>pom</type>
54 <scope>import</scope>
55 </dependency>
56
57 <dependency>
58 <groupId>mysql</groupId>
59 <artifactId>mysql-connector-java</artifactId>
60 <version>${mysql.version}</version>
61 </dependency>
62 <dependency>
63 <groupId>com.alibaba</groupId>
64 <artifactId>druid</artifactId>
65 <version>${druid.version}</version>
66 </dependency>
67 <dependency>
68 <groupId>org.mybatis.spring.boot</groupId>
69 <artifactId>mybatis-spring-boot-starter</artifactId>
70 <version>${mybatis.spring.boot.version}</version>
71 </dependency>
72 <dependency>
73 <groupId>junit</groupId>
74 <artifactId>junit</artifactId>
75 <version>${junit.version}</version>
76 </dependency>
77 <dependency>
78 <groupId>log4j</groupId>
79 <artifactId>log4j</artifactId>
80 <version>${log4j.version}</version>
81 </dependency>
82 <dependency>
83 <groupId>org.projectlombok</groupId>
84 <artifactId>lombok</artifactId>
85 <version>${lombok.version}</version>
86 <optional>true</optional>
87 </dependency>
88 </dependencies>
89 </dependencyManagement>
90
91 <build>
92 <plugins>
93 <plugin>
94 <groupId>org.springframework.boot</groupId>
95 <artifactId>spring-boot-maven-plugin</artifactId>
96 <configuration>
97 <fork>true</fork>
98 <addResources>true</addResources>
99 </configuration>
100 </plugin>
101 </plugins>
102 </build>
103
104 </project>

4.nacos作为注册中心的使用

4.1 单机版的使用

主要照考自nacos官网wiki

如何引入nacos作为注册中心

如果要在您的项目中使用 Nacos 来实现服务发现,使用 group ID 为 com.alibaba.cloud 和 artifact ID 为 spring-cloud-starter-alibaba-nacos-discovery 的 starter。

<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

其中,具体的版本号在父pom中已指定。

创建一个Provider 应用

nacos-producer,以下步骤展示了如何将一个服务注册到 Nacos。

1.pom.xml的配置。一个完整的 pom.xml 配置如下所示:

 1 <?xml version="1.0" encoding="UTF-8"?>
2 <project xmlns="http://maven.apache.org/POM/4.0.0"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5 <parent>
6 <artifactId>springcloud-alibaba</artifactId>
7 <groupId>cn.com.wjqhhuaxia</groupId>
8 <version>1.0-SNAPSHOT</version>
9 </parent>
10 <modelVersion>4.0.0</modelVersion>
11
12 <artifactId>nocas-provider</artifactId>
13
14 <dependencies>
15 <dependency>
16 <groupId>org.springframework.boot</groupId>
17 <artifactId>spring-boot-starter-web</artifactId>
18 </dependency>
19
20 <dependency>
21 <groupId>org.springframework.boot</groupId>
22 <artifactId>spring-boot-starter-actuator</artifactId>
23 </dependency>
24
25 <dependency>
26 <groupId>com.alibaba.cloud</groupId>
27 <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
28 </dependency>
29 </dependencies>
30
31 <build>
32 <plugins>
33 <plugin>
34 <groupId>org.springframework.boot</groupId>
35 <artifactId>spring-boot-maven-plugin</artifactId>
36 </plugin>
37 </plugins>
38 </build>
39
40 </project>

2. application.properties 配置。

# 服务端口
server.port=8081
# 服务名称
spring.application.name=nacos-provider
# nacos注册中心地址
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
# 暴露所有端点
management.endpoints.web.exposure.include=*

3.启动 Provider 示例

@SpringBootApplication
@EnableDiscoveryClient
public class NacosProviderDemoApplication { public static void main(String[] args) {
SpringApplication.run(NacosProviderDemoApplication.class, args);
} @RestController
public class EchoController {
@GetMapping(value = "/echo/{string}")
public String echo(@PathVariable String string) {
return "Hello Nacos Discovery " + string;
}
}
}

******再启动 Provider 应用之前 请先将 Nacos 服务启动。具体启动方式可参考 Nacos 官网*******

这个时候你就可以在 Nacos的控制台上看到注册上来的服务信息了。

如下图所示即表明服务提供者已正常注册至nacos服务注册中心

创建一个 Consumer 应用

nacos-consumer

由于nacos集成了ribbon,所以引入nacos即也就拥有了客户端负载的能力。

consumer的pom.xml 和 application.properties 的配置同服务提供者provider工程一致。在此不作累述。

启动一个 Consumer应用的示例代码如下所示:

@SpringBootApplication
@EnableDiscoveryClient
public class NacosConsumerApp { @RestController
public class NacosController{ @Autowired
private LoadBalancerClient loadBalancerClient;
@Autowired
private RestTemplate restTemplate; @Value("${spring.application.name}")
private String appName; @GetMapping("/echo/app-name")
public String echoAppName(){
//使用 LoadBalanceClient 和 RestTemolate 结合的方式来访问
ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-provider");
String url = String.format("http://%s:%s/echo/%s",serviceInstance.getHost(),serviceInstance.getPort(),appName);
System.out.println("request url:"+url);
return restTemplate.getForObject(url,String.class);
} } //实例化 RestTemplate 实例
@Bean
public RestTemplate restTemplate(){ return new RestTemplate();
} public static void main(String[] args) { SpringApplication.run(NacosConsumerApp.class,args);
}
}

在启动 Consumer 应用之前请先将 Nacos 服务启动好。具体启动方式可参考 Nacos 官网

启动consumer应用,当发现consumer能正常注册进入nacos控制台的服务列表,则表明consumer服务注册成功

这个例子中我们注入了一个 LoadBalancerClient 的实例,并且手动的实例化一个 RestTemplate,同时将 spring.application.name 的配置值 注入到应用中来, 目的是调用 Provider 提供的服务时,希望将当前配置的应用名给显示出来。

接下来进行服务间接口调用测试

4.2 linux环境nacos集群部署

  官网集群部署说明:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html

  说明:

    这里vip使用的是nginx,存储用的是msql。同时,jdk/nginx/mysql安装在这里不做介绍。

  具体步骤如下:

  1.下载nacos server安装包并上传至linux服务解压

    安装包下载官方地址:https://github.com/alibaba/nacos/releases

  2.初始化mysql数据库,数据库初始化文件:nacos-mysql.sql

    

  3.修改/nacos/conf/application.properties文件,增加mysql相关配置

    **** 注**** 最好先备份,再修改 例:cp application.properties application.properties.bakxxx

    增加如下配置:

spring.datasource.platform=mysql

db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=xxxx

   4.启动单机版nacos,测试mysql配置是否正常

     单机启动命令:sh startup.sh -m standalone

    测试,登录nacos控制台后,在配置管理中添加test-mysql-config.properties配置,同时,mysql数据库中生成对应数据,则表示mysql配置OK,数据存储至mysql数据库中。

      

      

   5.集群配置文件修改

    配置文件路径:/nacos/conf/cluster.conf.example

    设置集群的IP + 端口,示例:    

ip:8848
ip:8849
ip:8850

    6.修改nacos的启动脚本startup.sh使其支持指定端口启动:

     【****】一定要先做startup.sh的备份,以防改错,例:cp startup.sh startup.sh.bk

    修改项如下图所示(图片来至尚硅谷-阳哥的springcloud脑图):

    

  7.nginx配置修改

    

 注意事项:

  1.如果是mysql1.8+版本请参考如下配置

    添加mysql-connector-java-8.0.18.jar/nacos/plugins/mysql/mysql-connector-java-8.0.18.jar

   2.由于我是在阿里云服务器上搭建的集群环境,所以需要先确保对应的端口是开放的:先配置安全策略开放对应访问的端口,再打开防火墙

   3.linux防火墙和nginx配置修改后,记得重启防火墙/nginx。

5.nacos注册中心原理

  https://www.cnblogs.com/wuzhenzhao/p/13625491.html

参考:

  https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery

  https://www.lagou.com/lgeduarticle/126511.html

  https://blog.csdn.net/xxscj/article/details/90901505

  https://www.cnblogs.com/dw3306/p/12961353.html

【springcloud alibaba】注册中心之nacos的更多相关文章

  1. SpringCloud服务注册中心

    SpringCloud服务注册中心 Spring Cloud 是一系列框架的有序集合,如服务注册发现.配置中心.消息总线.负载均衡.断路器等,都可以用 Spring Boot 的开发风格做到一键启动和 ...

  2. SpringCloud Alibaba-nacos注册中心

    什么是 Nacos?(https://nacos.io) Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量 ...

  3. 二、springcloud Netflix 注册中心

    Eureka是Netflix开源的一款提供服务注册和发现的产品,它提供了完整的Service Registry和Service Discovery实现.也是springcloud体系中最重要最核心的组 ...

  4. SpringCloud搭建注册中心与服务注册

    上一篇文章<微服务注册中心原理,看这篇就够了!>介绍了注册中心的概念和原理,本文将介绍下利用Eureka搭建中心并注册服务到注册中心的过程. 本文目录 一.Eureka介绍二.搭建注册中心 ...

  5. springcloud eureka注册中心分布式配置

    最近在学习springcloud,做下笔记以及记下遇到的坑. 1.建立maven工程,结构很简单,一个启动类和一个配置文件,结构如下图所示 2.启动类代码如下,需要添加注册中心注解:EnableEur ...

  6. SpringCloud之注册中心Eureka搭建

    POM: <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring ...

  7. SpringCloud Eureka(注册中心集群)

    多个注册中心,其实用不同的配置对应 不同的端口号注册就行了. 注册中心自己也是个服务,看看之前的单个注册中心是怎么样的呢? server: port: 8888 # 服务端口eureka: insta ...

  8. springcloud eureka注册中心 高可复用。

    1:新建两个注册中心项目(名称都为:spring-cloud-eureka,只是端口分别为8000.8001 ).两个注册中心相互注册对方. 2:两个注册中心都启动后,则对方服务列表都有对方的服务. ...

  9. 微服务SpringCloud之注册中心Consul

    Consul 介绍 Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与发 ...

随机推荐

  1. 抓包工具-Charles

    1.简介Charles Charles其实是一款代理服务器,通过成为电脑或者浏览器的代理,然后截取请求和请求结果达到分析抓包的目的.charles有Window版本和Mac OS版本,也同时支持ios ...

  2. python使用笔记008-模块

    模块的原理: 1.就是一个python文件 2.标准模块是python自带的 3.第三方模块需要自己安装 导入模块的顺序: 1.从当前目录下找 2.从python的环境变量中找 一.自己定义的模块 1 ...

  3. [刘阳Java]_easyui-panel组件入门级_第3讲

    EasyUI中的panel组件在前面一节中我们简单告诉了大家代码如何写.这一节我们会从panel的入门级开始讲起走,重点包括它的事件监听,属性tool介绍 1. 事件监听-通过data-options ...

  4. 高性能内存图数据库RedisGraph(二)

    这篇文章主要介绍用一下RedisGraph的历史和现状. 2018年5月,Redis Labs发布了RedisGraph的预览/测试版.6个月后,在Redis Labs和开源社区的开发者们的共同努力下 ...

  5. c# checkedListBox设置多列横向显示 经验总结

    1. 设置checkedListBox的MultiColumn 属性为true; 2. 调整checkedListBox的宽度,调整ColumnWidth的宽度

  6. list实现从大到小排序

    public static void main(String[] args) { List<Integer> list=new ArrayList<Integer>(); // ...

  7. Aria2 任意文件写入

    访问aria2,发现服务已启动并且返回404页面 打开http://binux.github.io/yaaw/demo/#打开yaaw,点击配置按钮,填入运行aria2的目标域名:http://you ...

  8. linux安装虚拟环境的步骤

    1.创建名为env_wcs,python版本为3.6的虚拟环境conda create -n env_wcs python=3.6conda create -n my_ env numpy matpl ...

  9. 文件包含 & LFI-labs靶场

    文件包含漏洞学习 冲冲冲,好好学习 2020.1.30 认真对待自己做出的每一个决定 知识与实践 Q:什么是文件包含? A:简单一句话,为了更好地使用代码的重用性,引入了文件包含函数,可以通过文件包含 ...

  10. JSP的执行原理、JSP的内置对象、四大作用域解析、MVC模式理解>从零开始学JAVA系列

    目录 JSP的执行原理.JSP的内置对象.四大作用域解析.MVC模式理解 JSP的执行原理 这里拿一个小例子来解析JSP是如何被访问到的 首先将该项目部署到tomcat,并且通过tomcat启动 通过 ...