环境声明
在运行本地示例之前,需要保证本机具备以下的基础环境,如果您的本地没有当前的环境,下面会一步步进行搭建,演示搭建过程。
- Nacos 服务端
- Seata 服务端
- RocketMQ 服务端
- MySQL 服务端
可在国内https://gitee.com/mirrors/Spring-Cloud-Alibaba镜像下载Spring Cloud Alibaba开源项目。
组件服务版本
本项目的各个组件版本请移步至各个社区的 release 页面进行下载并解压。
- Nacos: 2.1.0 版本
- Seata: 1.5.1 版本
- RocketMQ: 4.9.4 版本
- MySQL: 5.7 版本
可查看下面文章的详细配置
- Spring Cloud Alibaba 容器化部署最佳实践 | 本地部署版本 | Nacos组件安装
- Spring Cloud Alibaba 容器化部署最佳实践 | 本地部署版本 | Seata服务端组件安装
- Spring Cloud Alibaba 容器化部署最佳实践 | 本地部署版本 | Rocketmq组件安装
host配置
为了保证代码可以正常启动,请先配置好本机的 host 映射,在配置文件中新增如下的映射。
host文件window路径为
C:\Windows\System32\drivers\etc
配置好后在浏览器地址栏输入http://integrated-mysql能访问127.0.0.1的网址就是成功了。地址可以是下面配置的任意一个。
# for integrated-example
127.0.0.1 integrated-mysql
127.0.0.1 nacos-server
127.0.0.1 seata-server
127.0.0.1 rocketmq
127.0.0.1 gateway-service
127.0.0.1 integrated-frontend
数据库配置
下面开始本地环境搭建准备,在数据库配置开始之前,请确保 MySQL 的服务端开启。
初始化业务表
针对第一个场景,订单、账户、库存微服务都需要各自的数据库,而第二个场景模拟点赞也需要存储点赞信息的数据库。
运行 spring-cloud-alibaba-examples/integrated-example/sql/init.sql
的 sql 脚本一键创建业务所需的环境以及 Seata 相关的表。
Seata相关配置可以查看上面的说的《Spring Cloud Alibaba 容器化部署最佳实践 | 本地部署版本 | Seata服务端组件安装》
Nacos配置
至此,数据库的服务配置完毕,下面需要配置 Nacos 的配置中心有关所有的微服务配置文件。
Nacos启动
Spring Cloud Alibaba 容器化部署最佳实践 | 本地部署版本 | Nacos组件安装
为了便于 example 的演示,这里采用 Nacos 的standalone
模式启动,进入到 Nacos 解压后的目录下,执行如下命令。
#Linux/Mac环境
sh bin/startup.sh -m standalone
#如果您是Ubuntu环境,执行上述命令启动报错提示[[符号找不到,可以执行如下的命令
bash bin/startup.sh -m standalone
#Win环境
.\bin\startup.cmd -m standalone
新增配置文件
在批量导入配置之前,请先修改integrated-example/config/datasource-config.yaml
中的数据源配置(用户名和密码)。
之后运行spring-cloud-alibaba-examples/integrated-example/scripts/nacos-config-quick.sh
来完成所有微服务配置的一键导入。
在window中可以使用git打开
配置已经导进来了
Seata 配置
Spring Cloud Alibaba 容器化部署最佳实践 | 本地部署版本 | Seata服务端组件安装
Nacos 服务注册中心以及配置中心部署完毕之后,下面是 Seata 服务端的配置。
Seata 的 db 模式需要额外配置数据库信息以及修改 Seata 服务端的配置文件,且在新版本中配置文件相较于旧版本进行了合并,因此这里为了便于演示方便,采用 Seata 单机的file
模式启动 Seata Server。
启动 Seata Server
进入到 release 解压后的 seata 目录中,执行如下命令。
#Linux/Mac环境
sh ./bin/seata-server.sh
#Win环境
bin\seata-server.bat
RocketMQ 配置
Spring Cloud Alibaba 容器化部署最佳实践 | 本地部署版本 | Rocketmq组件安装
Seata 服务启动后可以启动 RocketMQ 的 NameServer 以及 Broker 服务。
进入到 release 解压后的 rocketmq 目录中,执行如下命令。
启动 NameServer
#Linux/Mac环境
sh bin/mqnamesrv
#Win环境
.\bin\mqnamesrv.cmd
启动 Broker
#Linux/Mac环境
sh bin/mqbroker
#Win环境
.\bin\mqbroker.cmd
运行 Demo 示例
运行Demo的实例可以按着git上的例子测试了。启动过程中可能会遇到意外:
1. No spring.config.import property has been defined
Action:
Add a spring.config.import=configserver: property to your configuration.
If configuration is not required add spring.config.import=optional:configserver: instead.
To disable this check, set spring.cloud.config.import-check.enabled=false.
增加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
2. No Feign Client for loadBalancing defined. Did you forget to include spring-cloud-starter-loadbalancer?
修改依赖,排除ribbon
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
<exclusions>
<exclusion>
<groupId>com.netflix.ribbon</groupId>
<artifactId>ribbon</artifactId>
</exclusion>
</exclusions>
</dependency>
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
- When allowCredentials is true, allowedOrigins cannot contain the special value “*” since that cannot be set on the “Access-Control-Allow-Origin” response header. To allow credentials to a set of origins, list them explicitly or consider using “allowedOriginPatterns” instead.
把Gateway项目下的GatewayConfig类corsFilter方法config.setAllowCredentials(true);注释掉重新启动