文章目录
简介
服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现。
上篇中,服务调用的地址是写的固定的,如果服务地址变更需要手动修改地址,在程序开发中比较费劲,比较难管理。于是需要一个统一管理服务的组件,服务注册中心很多,如Zookeeper,Eureka,Consul,Nacos,本篇介绍Nacos,是SpringCloud Alibaba 的一个组件,负责服务注册发现和服务配置
服务注册中心具有以下功能:
服务发现:
服务注册:保存服务提供者和服务调用者的信息
服务订阅:服务调用者订阅服务提供者的信息,注册中心向订阅者推送提供者的信息
服务配置:
配置订阅:服务提供者和服务调用者订阅微服务相关的配置
配置下发:主动将配置推送给服务提供者和服务调用者
服务健康检测
检测服务提供者的健康情况,如果发现异常,执行服务剔除
naocs搭建
镜像拉取
docker pull nacos/nacos-server
nacos数据库脚本
创建数据库,nacos_config,执行脚本创建表。
创建容器
docker run -d --env MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=192.168.5.130 -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=123456 -e MYSQL_SERVICE_DB_NAME=nacos_config -e JVM_XMS=256m -e JVM_XMX=256m -e JVM_XMN=256m -p 8848:8848 --network=host --name nacos --restart=always nacos/nacos-server
查看启动日志
docker logs --since 1m nacos
错误:
Caused by: com.alibaba.nacos.api.exception.NacosException: Nacos Server did not start because dumpservice bean construction failure :
No DataSource set
at com.alibaba.nacos.config.server.service.dump.DumpService.dumpOperate(DumpService.java:225)
at com.alibaba.nacos.config.server.service.dump.ExternalDumpService.init(ExternalDumpService.java:52)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleElement.invoke(InitDestroyAnnotationBeanPostProcessor.java:389)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor$LifecycleMetadata.invokeInitMethods(InitDestroyAnnotationBeanPostProcessor.java:333)
at org.springframework.beans.factory.annotation.InitDestroyAnnotationBeanPostProcessor.postProcessBeforeInitialization(InitDestroyAnnotationBeanPostProcessor.java:157)
... 54 common frames omitted
Caused by: java.lang.IllegalStateException: No DataSource set
at org.springframework.util.Assert.state(Assert.java:76)
at org.springframework.jdbc.support.JdbcAccessor.obtainD
出现错误可能原因:
- mysql连接不上,需要设置配置文件application.properties中db.url的超时时间。原本是1000和3000
db.url.0=jdbc:mysql://${MYSQL_SERVICE_HOST}:${MYSQL_SERVICE_PORT:3306}/${MYSQL_SERVICE_DB_NAME}?${MYSQL_SERVICE_DB_PARAM:characterEncoding=utf8&connectTimeout=10000&socketTimeout=30000
端口问题8848未开放。
#开放端口
firewall-cmd --zone=public --add-port=8848/tcp --permanent
#重启防火墙
systemctl restart firewalld.service
#重启配置
firewall-cmd --reload
#查询已开放的端口(已开放的端口号集合):
firewall-cmd --zone=public --list-ports
数据库连接问题。尝试用命令登录数据库试试,在重启启动nacos。
访问nacos
默认的地址:http://nacos的服务ip:8848/nacos/,用户和密码默认都是nacos.
项目搭建
nacos依赖引入
需要注意版本对应 nacos1.4.1,nacos-discovery2.1.0.RELEASE,
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR12</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--nacos客户端-->
<!-- https://mvnrepository.com/artifact/com.alibaba.cloud/spring-cloud-starter-alibaba-nacos-discovery -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
yml配置服务注册地址
user和product以及order模块都需要配置
spring:
application:
name: springcloud-user
##nacos服务地址注册
cloud:
nacos:
discovery:
server-addr: nacos地址:8848
enabled: true
启动类
启动类都需要加@EnableDiscoveryClient注解。
/**
* 服务注册
*/
@EnableDiscoveryClient
@SpringBootApplication
public class SpringCloudUserApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudUserApplication.class,args);
}
}
服务注册是否成功
调用测试
日志
网页测试
下篇讲解,负载均衡调用