- 1 由 springboot 的 dto 拓展的内容
- 2 springboot 的 domain 中的 vo 是什么?
- 3 springboot 中创建多个模块创建、关联,后续如何打包呢?
- 4 springboot 模块化开发与项目搭建流程
- 5 如何让多模块的项目结构更加清晰、易于理解
- 6 PO、VO、DAO、BO、DTO、POJO 能分清吗?
- 7 控制反转 IoC 与依赖注入 DI
- 8 示例代码案例详细解释内容
- 9 基础项目功能简介带你入门挖坑
- 10 服务端部署
- 11 Spring Boot 整理大纲与数据结构实战
- 12 DAO 功能代码
- 13 MyBatis 讲解
- 14 MyBatis-CRUD 讲解
- 15 MyBatis 分页
- 16 一对多、多对一、SQL 缓存
- 17 Spring 我的春天
- 18 SpringMVC 我的春天
- 19 权限
- 20 Dubbo
- 21 SSO
- 22 security、Lombok、token、redis
- 23 login 与 register 代码流程
- 24 架构 mongodbmanager,Redis,Mybatis,Spring Security
- 25 实体类定义规则
- 26 centos 和 docker
24 架构 mongodbmanager,Redis,Mybatis,Spring Security
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
Spring Boot 提供了对 Redis 集成的组件包:spring-boot-starter-data-redis
,spring-boot-starter-data-redis
依赖于spring-data-redis
和 lettuce
。
Lettuce 是一个可伸缩线程安全的 Redis 客户端,多个线程可以共享同一个 RedisConnection,它利用优秀 netty NIO 框架来高效地管理多个连接。
# Redis数据库索引(默认为0)
spring.redis.database=0
# Redis服务器地址
spring.redis.host=localhost
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码(默认为空)
spring.redis.password=
# 连接池最大连接数(使用负值表示没有限制) 默认 8
spring.redis.lettuce.pool.max-active=8
# 连接池最大阻塞等待时间(使用负值表示没有限制) 默认 -1
spring.redis.lettuce.pool.max-wait=-1
# 连接池中的最大空闲连接 默认 8
spring.redis.lettuce.pool.max-idle=8
# 连接池中的最小空闲连接 默认 0
spring.redis.lettuce.pool.min-idle=0
Spring Session 提供了一套创建和管理 Servlet HttpSession 的方案。Spring Session 提供了集群 Session(Clustered Sessions)功能,默认采用外置的 Redis 来存储 Session 数据,以此来解决 Session 共享的问题。
在启动类中添加对 mapper 包扫描@MapperScan
@SpringBootApplication
@MapperScan("com.xxx.mapper")
public class MybatisAnnotationApplication {
public static void main(String[] args) {
SpringApplication.run(MybatisAnnotationApplication.class, args);
}
}
或者直接在 Mapper 类上面添加注解@Mapper
public interface UserMapper {
@Select("SELECT * FROM users")
@Results({
@Result(property = "userSex", column = "user_sex", javaType = UserSexEnum.class),
@Result(property = "nickName", column = "nick_name")
})
List<UserEntity> getAll();
@Select("SELECT * FROM users WHERE id = #{id}")
@Results({
@Result(property = "userSex", column = "user_sex", javaType = UserSexEnum.class),
@Result(property = "nickName", column = "nick_name")
})
UserEntity getOne(Long id);
@Insert("INSERT INTO users(userName,passWord,user_sex) VALUES(#{userName}, #{passWord}, #{userSex})")
void insert(UserEntity user);
@Update("UPDATE users SET userName=#{userName},nick_name=#{nickName} WHERE id =#{id}")
void update(UserEntity user);
@Delete("DELETE FROM users WHERE id =#{id}")
void delete(Long id);
}
mybatis.config-location=classpath:mybatis/mybatis-config.xml
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis-config.xml 配置
<configuration>
<typeAliases>
<typeAlias alias="Integer" type="java.lang.Integer" />
<typeAlias alias="Long" type="java.lang.Long" />
<typeAlias alias="HashMap" type="java.util.HashMap" />
<typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
<typeAlias alias="ArrayList" type="java.util.ArrayList" />
<typeAlias alias="LinkedList" type="java.util.LinkedList" />
</typeAliases>
</configuration>
RabbitMQ 是实现 AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。 RabbitMQ 主要是为了实现系统之间的双向解耦而实现的。当生产者大量产生数据时,消费者无法快速消费,那么需要一个中间层。保存这个数据。
AMQP,即 Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP 的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
RabbitMQ 是一个开源的 AMQP 实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP 等,支持 AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
- 虚拟主机:一个虚拟主机持有一组交换机、队列和绑定。为什么需要多个虚拟主机呢?很简单, RabbitMQ 当中,用户只能在虚拟主机的粒度进行权限控制。 因此,如果需要禁止A组访问B组的交换机/队列/绑定,必须为A和B分别创建一个虚拟主机。每一个 RabbitMQ 服务器都有一个默认的虚拟主机“/”。
- 交换机:Exchange 用于转发消息,但是它不会做存储 ,如果没有 Queue bind 到 Exchange 的话,它会直接丢弃掉 Producer 发送过来的消息。 这里有一个比较重要的概念:路由键 。消息到交换机的时候,交互机会转发到对应的队列中,那么究竟转发到哪个队列,就要根据该路由键。
- 绑定:也就是交换机需要和队列相绑定
交换机的功能主要是接收消息并且转发到绑定的队列,交换机不存储消息,在启用ack模式后,交换机找不到队列会返回错误。交换机有四种类型:Direct, topic, Headers and Fanout
Spring Boot 集成 RabbitMQ 非常简单,如果只是简单的使用配置非常少,Spring Boot 提供了spring-boot-starter-amqp
项目对消息各种支持。
简单使用
1、配置 Pom 包,主要是添加 spring-boot-starter-amqp
的支持
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2、配置文件
配置 RabbitMQ 的安装地址、端口以及账户信息
spring.application.name=Spring-boot-rabbitmq
spring.rabbitmq.host=192.168.0.86
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=123456
发送邮件
pom 包里面添加 spring-boot-starter-mail
包引用
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
</dependencies>
ValidateCode
类 只存放验证码和过期时间
import java.time.LocalDateTime;
import lombok.Data;
@Data
public class ValidateCode {
private String code;
private LocalDateTime expireTime;
public ValidateCode(String code, int expireIn) {
this.code = code;
this.expireTime = LocalDateTime.now().plusSeconds(expireIn);
}
public boolean isExpried() {
return LocalDateTime.now().isAfter(getExpireTime());
}
public ValidateCode(String code, LocalDateTime expireTime) {
super();
this.code = code;
this.expireTime = expireTime;
}
}
import org.springframework.web.context.request.ServletWebRequest;
public interface ValidateCodeGenerator {
ValidateCode generate(ServletWebRequest request);
}
// 短信验证码生成器
@Component("smsCodeGenerator")
public class SmsCodeGenerator implements ValidateCodeGenerator {
@Override
public ValidateCode generate(ServletWebRequest request) {
String code = RandomStringUtils.randomNumeric(SecurityConstants.SMS_RANDOM_SIZE);
return new ValidateCode(code, SecurityConstants.SMS_EXPIRE_SECOND);
}
}
public interface SmsCodeSender {
void send(String mobile, String code)
}
技术 | 说明 | 官网 |
---|---|---|
Spring Boot | 容器+MVC框架 | https://spring.io/projects/spring-boot |
Spring Security | 认证和授权框架 | https://spring.io/projects/spring-security |
Mybatis | ORM框架 | http://www.mybatis.org/mybatis-3/zh/index.html |
MyBatisGenerator | 数据层代码生成 | http://www.mybatis.org/generator/index.html |
PageHelper | MyBatis物理分页插件 | http://git.oschina.net/free/Mybatis_PageHelper |
Swagger-UI | 文档生成工具 | https://github.com/swagger-api/swagger-ui |
Elasticsearch | 搜索引擎 | https://github.com/elastic/elasticsearch |
RabbitMq | 消息队列 | https://www.rabbitmq.com/ |
Redis | 分布式缓存 | https://redis.io/ |
MongoDb | 文档型数据库 | https://www.mongodb.com/ |
zookeeper | 分布式锁 | https://zookeeper.apache.org/ |
Docker | 应用容器引擎 | https://www.docker.com/ |
Druid | 数据库连接池 | https://github.com/alibaba/druid |
OSS | 对象存储 | https://github.com/aliyun/aliyun-oss-java-sdk |
JWT | JWT登录支持 | https://github.com/jwtk/jjwt |
LogStash | 日志收集 | https://github.com/logstash/logstash-logback-encoder |
Lombok | 简化对象封装工具 | https://github.com/rzwitserloot/lombok |
Seata | 全局事务管理框架 | https://github.com/seata/seata |
Portainer | 可视化Docker容器管理 | https://github.com/portainer/portainer |
canal | 数据同步 | https://github.com/alibaba/canal |
https://www.rabbitmq.com/install-homebrew.html
redis、mongodb 和 rabbitmq
spring:
datasource:
url:jdbc:mysql://localhost:3306/xxx?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
username:druid
password:druid705
druid:
initial-size:5#连接池初始化大小
min-idle:10#最小空闲连接数
max-active:20#最大连接数
web-stat-filter:
exclusions:"*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"#不统计这些请求数据
stat-view-servlet:#访问监控网页的登录用户名和密码
login-username:druid
login-password:druid
data:
mongodb:
host:134.175.187.61
uri:mongodb://mongod:<password>@134.175.187.61:27017/test
redis:
host:134.175.187.61# Redis服务器地址
database:0# Redis数据库索引(默认为0)
port:6379# Redis服务器连接端口
password:# Redis服务器连接密码(默认为空)
jedis:
pool:
max-active:8# 连接池最大连接数(使用负值表示没有限制)
max-wait:-1ms# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-idle:8# 连接池中的最大空闲连接
min-idle:0# 连接池中的最小空闲连接
timeout:3000ms# 连接超时时间(毫秒)
rabbitmq:
host:localhost
port:5672
virtual-host:/#xxx
username:admin
password:admin123
publisher-confirms:true#如果对异步消息需要回调必须设置为true
腾讯云服务器上的mongodb数据库连接
spring:
datasource:
url:jdbc:mysql://localhost:3306/xxx`?serverTimezone=UTC&useSSL=false&useUnicode=true&characterEncoding=UTF-8
username:druid
password:druid705
druid:
initial-size:5#连接池初始化大小
min-idle:10#最小空闲连接数
max-active:20#最大连接数
web-stat-filter:
exclusions:"*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*"#不统计这些请求数据
stat-view-servlet:#访问监控网页的登录用户名和密码
login-username:druid
login-password:druid
data:
elasticsearch:
repositories:
enabled:true
cluster-nodes:localhost:9200
cluster-name:elasticsearch
elasticsearch:
rest:
uris:["http://localhost:9200"]
报错:
错误:rpmdb:BDB0113 线程/进程 12788/140191014115392 失败:BDB1507 线程在 Berkeley DB 库中死亡 错误:来自 dbenv->failchk 的 db5 错误(-30973):BDB0087 DB_RUNRECOVERY:致命错误,运行数据库恢复 错误:无法使用 db5 打开 /var/lib/rpm 中的 Packages 索引 - (-30973) 错误:无法在 /var/lib/rpm 中打开 Packages 数据库 CRITICAL:yum.main:
错误:rpmdb 打开失败
Zookeeper是一个开源的分布式协调服务,它可以用于管理和协调分布式应用程序,提供分布式锁、命名服务、配置管理、集群管理等功能。下载Zookeeper可以用于构建高可用性、可伸缩性的分布式系统,并且它广泛应用于大型分布式存储、消息队列、Hadoop集群等领域。如果您需要构建或者管理分布式系统,那么Zookeeper将会是一个非常有用的工具。
Zookeeper是一个开源的分布式协调服务,主要用于分布式应用程序的协调与管理。
安装Nacos
解压并移动至安装目录
tar -zxvf nacos-server-1.4.1.tar.gz -C /usr/local/
创建名为nacos_config的数据库,之后使用 MySQL 客户端执行 /usr/local/nacos/conf/nacos-mysql.sql 文件,完成建表工作。
打开 Nacos 服务器中的核心配置文件 application.properties,文件路径如下:
/usr/local/nacos/conf/application.properties
定位到 33 行 spring.datasource.platform “数据源”配置附近,默认数据源配置都被#号注释,删除注释按下方示例配置数据源即可。
### 设置数据库类型
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&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=nacos_config
db.password.0=password
设置集群配置
配置多台(至少三台)Nacos服务后,执行如下命令创建集群配置文件:
cp /usr/local/nacos/cluster.conf.example /usr/local/nacos/cluster.conf
将集群节点按如下格式配置在文件中,默认8848端口可不配置
\#it is ip
# example
192.168.16.101:8847
192.168.16.102
192.168.16.103
cd /usr/local/nacos
# 以单机模式运行
bash startup.sh -m standalone
# 以集群模式运行
bash startup.sh
https://github.com/alibaba/nacos/releases
- 解压安装包,直接运行
bin
目录下的startup.cmd
; - 运行成功后,访问
http://localhost:8848/nacos
可以查看Nacos的主页,默认账号密码都是nacos。 - 创建nacos-user-service模块和nacos-ribbon-service模块;
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.1.0.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
- 修改相关依赖,把原来的Consul注册发现的依赖改为Nacos的:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 修改配置文件application.yml,将Consul的注册发现配置改为Nacos的:
server:
port: 8206
spring:
application:
name: nacos-user-service
cloud:
nacos:
discovery:
server-addr: localhost:8848 #配置Nacos地址
management:
endpoints:
web:
exposure:
include: '*'
创建nacos-config-client模块
- 在pom.xml中添加相关依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 添加配置文件application.yml,启用的是dev环境的配置:
spring:
profiles:
active: dev
- 添加配置文件bootstrap.yml,主要是对Nacos的作为配置中心的功能进行配置:
server:
port: 9101
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848 #Nacos地址
config:
server-addr: localhost:8848 #Nacos地址
file-extension: yaml #这里我们获取的yaml格式的配置
- 创建ConfigClientController,从Nacos配置中心中获取配置信息:
@RestController
@RefreshScope
public class ConfigClientController {
@Value("${config.info}")
private String configInfo;
@GetMapping("/configInfo")
public String getConfigInfo() {
return configInfo;
}
}
start_zookeeper.sh
/usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties >zookeeper.log 2>&1 &
start_kafka.sh
/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties >kafka.log 2>&1 &
Nacos 的运行是需要数据库的,它支持两种数据库:本地数据库 Derby、和 MySQL 数据库。 所以对应的启动命令有以下几种:
- Derby 数据库运行单机模式:docker-compose -f example/standalone-derby.yaml up
- MySQL 5.7 数据库运行单机模式:docker-compose -f example/standalone-mysql-5.7.yaml up
- MySQL 8 数据库运行单机模式:docker-compose -f example/standalone-mysql-8.yaml up
集群模式启动:docker-compose -f example/cluster-hostname.yaml up
你收到的错误消息表明你的系统上未安装 docker-compose
命令,或者它没有在系统的 PATH 环境变量中。
假设你已经安装了 Docker,你可以按照以下步骤安装 docker-compose
:
- 打开终端窗口。
- 运行以下命令下载最新版本的
docker-compose
:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
这将下载 docker-compose
二进制文件并存储在 /usr/local/bin
目录中。
- 将
docker-compose
二进制文件设置为可执行:
sudo chmod +x /usr/local/bin/docker-compose
4. 运行以下命令验证 docker-compose
是否已正确安装:
docker-compose --version
这应该显示刚刚安装的 docker-compose
版本号。
安装完 docker-compose
后,你可以尝试再次运行你的命令。
升级 Docker 版本可以解决许多问题,包括与已弃用的标志和命令相关的问题。以下是升级 Docker 的步骤:
- 首先,您需要确定当前安装的 Docker 版本。可以在终端中运行以下命令:
docker version
该命令将显示 Docker 客户端和服务器的版本信息。
- 下载并安装最新版本的 Docker。可以根据您的操作系统从 Docker 官网下载适当的安装程序。如果您使用的是 Linux 系统,则可以运行以下命令来升级 Docker:
sudo apt-get update && sudo apt-get install docker-ce
这将更新软件包列表并安装最新版本的 Docker。
- 安装完毕后,您需要重新启动 Docker 服务。可以使用以下命令完成此操作:
sudo systemctl restart docker
4. 最后,您可以再次运行以下命令来验证 Docker 版本:
docker version
如果所有步骤都无误,您应该看到已安装最新版本的 Docker。请注意,在升级过程中可能会丢失一些数据或配置文件,请确保备份重要数据并跟随官方文档的建议进行操作。
这个错误通常是因为您正在运行的系统不是基于 Debian 或 Ubuntu 的系统,而 apt-get
命令只能在这些系统上使用。如果您正在运行其他系统(例如 CentOS、Fedora 或 macOS),则需要使用适当的包管理器或手动安装 Docker。
以下是一些在不同操作系统上安装 Docker 的方法:
- 对于 CentOS,可以使用 yum 包管理器来安装 Docker:
sudo yum install docker-ce
- 对于 Fedora,可以使用 dnf 包管理器来安装 Docker:
sudo dnf install docker-ce
- 对于 macOS,可以从 Docker 官网下载 Docker for Mac 并进行安装。
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。
下载的是Linux环境下最新稳定版本nacos-server-2.0.3.tar.gz
包,并能使用FinalShell
云服务器客户端连接工具登录云服务器后上传到云服务器的/usr/local
目录下:
然后执行解压缩命令并切换到nacos/bin
目录:
启动服务: 切换到nacos/bin
目录下后执行启动nacos
服务命令(启动命令standalone
代表着单机模式运行,非集群模式)
sh startup.sh -m standalone
nacos is starting with standalone
nacos is starting, you can check the /usr/local/nacos/nacos/logs/start.out
默认 Nacos 以后台模式启动,利用 tail 命令查看启动日志。可以看到 Nacos 默认端口为 8848
tail -f ./logs/start.out
https://www.elastic.co/cn/kibana/
https://grafana.com/
docker pull containerize/elastichd
Quick Start:
docker run -p 9200:9200 -d --name elasticsearch elasticsearch
docker run -p 9800:9800 -d --link elasticsearch:demo containerize/elastichd
https://github.com/dushixiang/kafka-map
Nacos Docker 快速开始
操作步骤
Clone 项目
git clone https://github.com/nacos-group/nacos-docker.git cd nacos-docker
单机模式 Derby
docker-compose -f example/standalone-derby.yaml up
单机模式 MySQL
如果希望使用MySQL5.7
docker-compose -f example/standalone-mysql-5.7.yaml up
如果希望使用MySQL8
docker-compose -f example/standalone-mysql-8.yaml up
集群模式
docker-compose -f example/cluster-hostname.yaml up
服务注册
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
服务发现
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'
发布配置
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=helloWorld"
获取配置
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
Nacos 控制台
link:http://127.0.0.1:8848/nacos/
sh startup.sh -m standalone
nacos is starting with standalone
nacos is starting,you can check the /usr/local/nacos/logs/start.out
服务注册&发现和配置管理
服务注册
curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
服务发现
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instance/list?serviceName=nacos.naming.serviceName'
发布配置
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=HelloWorld"
获取配置
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
5.关闭服务器
Linux/Unix/Mac
sh shutdown.sh
Nacos Docker
Quick Start
docker run --name nacos-quick -e MODE=standalone -p 8849:8848 -d nacos/nacos-server:2.0.2
Advanced Usage
- Tips: You can change the version of the Nacos image in the compose file from the following configuration.
example/.env
NACOS_VERSION=2.0.2
Run the following command:
Clone project
git clone --depth 1 https://github.com/nacos-group/nacos-docker.git cd nacos-docker
Standalone Derby
docker-compose -f example/standalone-derby.yaml up
Standalone Mysql
# Using mysql 5.7 docker-compose -f example/standalone-mysql-5.7.yaml up # Using mysql 8 docker-compose -f example/standalone-mysql-8.yaml up
Cluster
docker-compose -f example/cluster-hostname.yaml up
Service registration
curl -X PUT 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.10&port=8080'
Service discovery
curl -X GET 'http://127.0.0.1:8848/nacos/v1/ns/instances?serviceName=nacos.naming.serviceName'
Publish config
curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test&content=helloWorld"
Get config
curl -X GET "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test"
Open the Nacos console in your browser
link:http://127.0.0.1:8848/nacos/
- 开放端口防火墙和安全组
默认 CentOS 系统并没有对外开放 7848/8848 端口,需要设置防火墙对 7848/8848 端口放行。
其中,8848 端口是 Nacos 对客户端提供服务的端口,7848 是 Nacos 集群通信端口,用于Nacos 集群间进行选举,检测等。另外,Nacos 2.0以后增加了用于grpc
客户端和服务端通信的长连接9848和9849端口,需要将这两个端口也一并开放。
登录Nacos的UI管理界面了,用户名和密码都是nacos
右侧选中 Custom,写入阿里云地址[start.aliyun.com],默认的 [start.spring.io]。
界面中的Next按钮后进入Dependencies
界面,选中Spring Cloud Alibaba
模块后在右侧的依赖项中勾选Nacos Service Discovery
;同样选中Web
模块后在右侧的依赖项中勾选Spring Web
依赖。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.lagou</groupId>
<artifactId>nacos-sample</artifactId>
<version>1.0.0-SNAPSHOT</version>
<name>nacos-sample</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<spring-boot.version>2.3.7.RELEASE</spring-boot.version>
<spring-cloud-alibaba.version>2.2.2.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>${spring-boot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.3.7.RELEASE</version>
<configuration>
<mainClass>com.lagou.nacossample.NacosSampleApplication</mainClass>
</configuration>
<executions>
<execution>
<id>repackage</id>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
修改application.properties
文件
# 应用名称
spring.application.name=nacos-sample
# 应用服务 WEB 访问端口
server.port=9000
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
#spring.cloud.nacos.discovery.server-addr=mse-6d50f4f0-p.nacos-ans.mse.aliyuncs.com:8848
spring.cloud.nacos.discovery.server-addr=http://xxxxxxxx:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public
#spring.cloud.nacos.discovery.endpoint=nacos
spring.cloud.nacos.discovery.log-name=nacosLog
spring.cloud.nacos.discovery.cluster-name=nacos-cluster
spring.cloud.nacos.discovery.group=nacos-group
spring.cloud.loadbalancer.ribbon.enabled=true
management.endpoints.web.exposure.include=*
Derby 数据库运行单机模式:docker-compose -f example/standalone-derby.yaml up
MySQL 5.7 数据库运行单机模式:docker-compose -f example/standalone-mysql-5.7.yaml up
MySQL 8 数据库运行单机模式:docker-compose -f example/standalone-mysql-8.yaml up
docker-compose 是用于定义和运行多容器 Docker 应用程序的编排工具。使用 docker-compose 后不再需要逐一创建和启动容器。您可以使用 YML 文件来配置应用程序需要的所有服务,然后使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。 但是 docker-compose 需要单独安装,否则会出现以下错误
解决方案:
cd /usr/local/bin
wget https://github.com/docker/compose/releases/download/1.14.0-rc2/docker-compose-Linux-x86_64
rename docker-compose-Linux-x86_64 docker-compose docker-compose-Linux-x86_64
chmod +x /usr/local/bin/docker-compose
docker-compose version
使用 docker-compose 可能会提示“ERROR: no such image: nacos/nacos-server:: invalid reference format”,无效的参数格式
解决方案:修改 Nacos 源码中 example/standalone-mysql-5.7.yaml 的配置项,将“image: nacos/nacos-server:{{NACOS_VERSION}}”,修改为:“image: nacos/nacos-server:latest”。
Spring Cloud Alibaba Nacos 项目主要有两个依赖项
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
在配置文件 application.properties 中要填写 Nacos 的相关信息,具体内容如下:
# 应用名称(也是 Nacos 中的服务名)
spring.application.name=spring-cloud-nacos-producer
# 应用服务 WEB 访问端口
server.port=8082
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=mse-6d50f4f0-p.nacos-ans.mse.aliyuncs.com:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public
# 应用名称
spring.application.name=springcloud-nacos-consumer
# 应用服务 WEB 访问端口
server.port=8082
# Nacos帮助文档: https://nacos.io/zh-cn/docs/concepts.html
# Nacos认证信息
spring.cloud.nacos.discovery.username=nacos
spring.cloud.nacos.discovery.password=nacos
# Nacos 服务发现与注册配置,其中子属性 server-addr 指定 Nacos 服务器主机和端口
spring.cloud.nacos.discovery.server-addr=xx.xxx.xxx.xx:8848
# 注册到 nacos 的指定 namespace,默认为 public
spring.cloud.nacos.discovery.namespace=public
安装zookeeper
一、下载
docker pull zookeeper
二、运行
docker run -p 2181:2181 -d zookeeper
三、进入容器
docker exec -it 容器id bash
安装 nacos(单机、mysql):
一、下载
docker pull nacos/nacos-server
二、挂载目录,用于映射到容器
mkdir -p /home/docker/nacos/logs/
mkdir -p /home/docker/nacos/init.d/
三、修改配置文件
vim /home/docker/nacos/init.d/custom.properties
内容如下:
server.contextPath=/nacos
server.servlet.contextPath=/nacos
server.port=8848
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/nacos_devtest_prod?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=user
db.password=pass
nacos.cmdb.dumpTaskInterval=3600
nacos.cmdb.eventTaskInterval=10
nacos.cmdb.labelTaskInterval=300
nacos.cmdb.loadDataAtStart=false
management.metrics.export.elastic.enabled=false
management.metrics.export.influx.enabled=false
server.tomcat.accesslog.enabled=true
server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
nacos.naming.distro.taskDispatchThreadCount=1
nacos.naming.distro.taskDispatchPeriod=200
nacos.naming.distro.batchSyncKeyCount=1000
nacos.naming.distro.initDataRatio=0.9
nacos.naming.distro.syncRetryDelay=5000
nacos.naming.data.warmup=true
nacos.naming.expireInstance=true
四、执行sql语句
1、下载
https://github.com/alibaba/nacos/blob/master/config/src/main/resources/META-INF/nacos-db.sql
2、在 mysql 中创建数据库,并且执行 sql 语句
3、修改配置文件信息
五、启动容器
docker run --name nacos -d -p 8848:8848 --privileged=true --restart=always -e JVM_XMS=256m -e JVM_XMX=256m -e MODE=standalone -e PREFER_HOST_MODE=hostname -v /home/docker/nacos/logs/ -v /home/docker/nacos/init.d/custom.properties:/home/nacos/init.d/custom.properties nacos/nacos-server
https://juejin.cn/post/7232959782281920567
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论