服务治理是微服务架构中最核心最基本的模块。用于实现各个微服务的自动化注册与发现。
上篇中,服务调用的地址是写的固定的,如果服务地址变更需要手动修改地址,在程序开发中比较费劲,比较难管理。于是需要一个统一管理服务的组件,服务注册中心很多,如Zookeeper,Eureka,Consul,Nacos,本篇介绍Nacos,是SpringCloud Alibaba 的一个组件,负责服务注册发现和服务配置。
服务注册中心具有以下功能:
docker pull nacos/nacos-server
创建数据库,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
出现错误可能原因:
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
2.端口问题8848未开放。
#开放端口
firewall-cmd --zone=public --add-port=8848/tcp --permanent
#重启防火墙
systemctl restart firewalld.service
#重启配置
firewall-cmd --reload
#查询已开放的端口(已开放的端口号集合):
firewall-cmd --zone=public --list-ports
3.数据库连接问题。尝试用命令登录数据库试试,在重启启动nacos。
默认的地址:http://nacos的服务ip:8848/nacos/,用户和密码默认都是nacos.
需要注意版本对应 nacos1.4.1,nacos-discovery2.1.0.RELEASE,
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-dependenciesartifactId>
<version>Hoxton.SR12version>
<type>pomtype>
<scope>importscope>
dependency>
<dependency>
<groupId>com.alibaba.cloudgroupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
<version>2.1.0.RELEASEversion>
dependency>
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);
}
}
日志
网页测试
下篇讲解,负载均衡调用。