40 图 |我用 Mac M1 玩转 Spring Cloud
我的开源 Spring Cloud 项目 PassJava
一直可以在 Windows 上正常运行,最近不是换 Mac M1
了么,想把这个项目在 M1 上跑起来,毕竟我的那台 Windows 用起来发烫,是该体验下 M1 的性能了。
因为 M1
的兼容性不好,所以在从 0 开始跑这个项目的遇到了很多问题,比如 MySQL 工具经常打不开,前端 Vue 项目起不来,所以专门针对这些疑难杂症,我也做好了记录,相信对使用 M1 的同学有帮助。
我把后端、前端、小程序都上传到同一个仓库里面了,大家可以通过 github
或 码云
访问。地址如下:
Github: https://github.com/Jackson0714/PassJava-Platform
码云:https://gitee.com/jayh2018/PassJava-Platform
配套教程:www.passjava.cn
整体的架构图如下图所示:
本文主要内容如下:
一、配置 Nacos
Nacos 作为配置中心和注册中心,是必须要启动的。
1.1 下载地址
Nacos 下载地址:
https://github.com/alibaba/nacos/releases
最新版是 2.0.0-bugfix,我下载后,启动成功了,但是无法访问 Nacos 后台,怀疑是本地环境有问题,所以换了一个低版本的 1.4.1,可以正常工作。另外我之前在 windows 机器上使用的 1.2.1 的版本,拷贝到 Mac 上也能正常运行。
1.2 启动 Nacos
进入 nacos 根目录,执行命令:
sh startup.sh -m standalone
执行后的结果如下图所示:
看到 nacos is starting withi standalone 就表示启动成功。注意:启动成功不代表正常运行。
接下来访问 nacos 的后台管理系统:
http://127.0.0.1:8848/nacos/#/login
账号和密码都是 nacos
。
1.3 添加命名空间
添加 7 个微服务的命名空间:
新建命名空间时需要填写的字段:
1.4 添加 question 微服务配置
在配置列表添加几个微服务的配置,目前保证 question 微服务和 thirdparty 微服务有配置即可。
如下图所示,添加三个配置项:数据源,mybatis 配置,其他配置。详细的配置参数参照这篇来配置:《SpringCloud整合Nacos配置中心》
。
1.5 添加 thirdparty 微服务配置
主要是配置阿里云 OSS,用来保存图片的。配置如下图所示,key 需要大家到自己登陆到阿里云并申请 OSS 才能获取到。参照这篇《SpringCloud整合OSS对象存储》
。
二、初始化数据
创建数据库、表、初始化数据这些工作都需要做,下载一个 MySQL 客户端还是要方便点,然后找 Mac 上好用的客户端软件,下面是安装软件的艰辛历程。
1.1 安装 Mac 版 MySQL
首先需要安装 mac 版的 MySQL,下载地址:
https://dev.mysql.com/downloads/mysql/
选择第一个就可以了,官网已经提示该版本兼容 Mac M1
Packages for Catalina (10.15) are compatible with Big Sur (11)
下载后点击安装,安装成功后,到系统偏好配置里面找到 MySQL,并单击打开。
可以看到运行的 MySQL 实例是 MySQL 8.0.23,且默认开机运行。
![]
2.2 安装 Mac 版图形化 MySQL 界面
2.2.1 Workbench 在 M1 上不能运行
我试过安装 workbench 后,不能运行。
2.2.2 Squel Pro 在 M1 上不能运行
安装 Squel Pro 后,切换数据库的时候程序崩溃。
2.2.3 Navicat
经过上面两个软件的崩溃后,我最后还是下载了试用版的 Navicat,可以免费用 14 天,对于初始化数据足够了。
下载地址:
http://www.navicat.com.cn/download/navicat-for-mysql
下载 macOS 的最新版 15,它是兼容 M1 芯片的。
然后需要执行三个 SQL 文件,文件我已经上传到仓库上了,
/passjava-platform/data/sql
依次执行上面的三个文件后,会生成 6 个数据库,一个系统数据库,五个业务数据库。
三、启动微服务
主要启动 4 个核心服务:网关微服务
、题目微服务
、第三方微服务
、系统管理微服务
。
架构图如下所示:
目前这几个微服务已经整合了 Nacos、OpenFeign、Gateway、统一异常处理、链路追踪,Redis 等。
启动都是基于 IDEA 开发工具直接启动的,所以需要下载 IDEA。
3.1 下载安装 IDEA
我安装的 IDEA 是旗舰版 2020.3 的,试用版 30 天。大家可以下载免费的社区版 Community,功能上也能满足。
性能非常快,我的 Windows 的配置:ThinkPad、 32 G 内存、1T 固态硬盘,启动一个微服务需要 10 秒以上。而 Mac 只需要 3 秒
。
官网下载地址:
https://www.jetbrains.com/idea/download/#section=mac
3.2 启动系统管理服务
我们的后台框架是用的人人框架,主要的功能就是后台的登陆、系统管理功能、所以必须启动 renren-fast
服务才能使用后台管理。
大家可以启动 RenrenApplication 这个 Service,启动成功后,会提示以下信息:
renren-fast 服务暴露的端口是 8080,但是这个端口对前端是不可见的,前端 API 都是走网关的 8060 端口。将前端的请求转发到 renren-fast 的8060 端口,比如登陆请求。注意:一定要初始化完数据才能启动成功。
3.3 启动网关
网关微服务没有什么特殊要求,我都配置好了,直接启动就好了。另外如果遇到端口被占用的情况,可以通过如下命令解决:
lsof -i:8060
kill -9 <进程 id>
网关微服务暴露的端口是 8060,启动后如下图所示:
3.4 启动题目服务
题目服务是核心模块,很多实战案例都是基于这个模块进行讲解的。启动服务之前,需要配置数据库 MySQL 的连接。
3.4.1 配置数据库连接
文件路径:/passjava-question/src/main/resources/application.yml
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/passjava_qms?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT
username: root
password: xxx
另外我们也可以通过 nacos 来配置:
3.4.2 启动题目服务
IDEA 工具中直接启动就可以了,暴露的端口是 11000,启动后如下图所示:
3.4.3 测试题目服务
用 postman 测试网关+题目微服务是否正常工作:
由于我的数据库中是有数据的,所以会返回很多数据,大家后面可自行添加数据。
3.5 启动第三方服务
这个第三方不是指另外一方的服务,而是我把与第三方中间件交互的服务都归在这个服务里面了,比如对阿里云 OSS(对象存储) 的操作。
这个服务的名字叫做:passjava-thirdparty
。另外需要注意,OSS 需要大家到阿里云官网申请,有免费额度哦~配置方式可以参照这篇:《SpringCloud整合OSS对象存储》
启动成功后,如下图所示:
四、启动 Admin 后台
Admin 管理后台的技术选型还是用的 Vue,所以需要使用 npm 工具来安装依赖。
4.1 安装 npm、nvm
使用 homebrew 安装 npm
brew install npm
使用 homebrew 安装 nvm
brew install nvm
4.2 切换镜像源
默认的 npm 使用的是官方的镜像源,我们切换为国内的淘宝镜像源。
npm install -g cnpm --registry=https://registry.npm.taobao.org --verbose
4.3 安装 node_module
仓库里面并没有将依赖包一起上传,因为依赖包太大了,所以可在本地通过如下命令安装依赖包,这个是一次性的,后面不需要再执行。
进入到 passjava-platform/passjava-portal 目录,执行如下命令来安装依赖:
cnpm install
启动前端portal
npm run dev
报错,提示 Node Sass 不兼容当前的系统:
Node Sass does not yet support your current environment: OS X Unsupported architecture (arm64) with Unsupported runtime (88)
根据网上提供的解决方案,要先卸载 Node Saas
cnpm uninstall node-sass
但是又提示 chromedriver 安装失败(当前操作系统不兼容),根据网上的解决方案,单独安装,但依旧提示 64 位系统不兼容,于是我把 package.json 文件中的 "chromedriver": "2.27.2" 删掉了,问题迎刃而解!最新的代码已删除该依赖项配置。
先删除之前安装 node_modules
rm -rf ./node_modules/
再次执行卸载 node-sass 的命令:
cnpm uninstall node-sass
卸载成功后,安装 node-sass
cnpm install node-sass --unsafe-perm --save-dev
重新安装依赖
cnpm install
4.4 启动后台
在根目录执行如下命令就可以启动后台了:
npm run dev
启动成功后,会自动打开浏览器,访问的地址是 http://localhost:8081
4.5 登陆后台
账号密码都是 admin,输入验证码即可登录。注意:如果验证码没有出现,说明 RenrenApplication 微服务有异常,请查看 IDEA 中打印出的 log。
登录后台界面如下图所示:
4.6 添加题目分类
首先需要给题目进行分类,在后台点击新增类型,如下图所示:
注意:上传图片前需要启动 thirdparty 微服务,且 OSS 配置正确。
4.7 添加面试题
五、其他
5.1 未适配的镜像
我的开源项目中要用 Elasticsearch 和 Kibana 需要运行在 docker 上,目前这些镜像在 M1 上还未适配。
5.2 前端小程序
小程序的开发和测试在这里也不演示了, M1 上开发小程序完全没问题~
5.3 未添加的中间件
因本篇只是出于核心功能的演示,所以还有些中间件未提及,比如配置 Redis、链路追踪等,这些功能不影响 M1 上使用 Spring Cloud,所以会放在后续的文章中做进一步说明。
下一篇实战 Redis 也安排上了,敬请期待。
40 图 |我用 Mac M1 玩转 Spring Cloud的更多相关文章
- 玩转Spring Cloud之API网关(zuul)
最近因为工作原因,一直没有空写文章,所以都是边忙项目,边利用空闲时间,周末时间学习总结,最终在下班回家后加班加点写完本篇文章,若有不足之处,还请谅解,谢谢! 本文内容导航: 一.网关的作用 二.网关与 ...
- 玩转Spring Cloud之熔断降级(Hystrix)与监控
本文内容导航目录: 前言:解释熔断降级一.搭建服务消费者项目,并集成 Hystrix环境 1.1.在POM XML中添加Hystrix依赖(spring-cloud-starter-netflix-h ...
- 玩转Spring Cloud之服务注册发现(eureka)及负载均衡消费(ribbon、feign)
如果说用Spring Boot+Spring MVC是开发单体应用(或单体服务)的利器,那么Spring Boot+Spring MVC+Spring Cloud将是开发分布式应用(快速构建微服务)的 ...
- 玩转Spring Cloud之配置中心(config server &config client)
本文内容导航: 一.搭建配置服务中心(config server) 1.1.git方式 1.2.svn方式 1.3.本地文件方式 1.4.解决配置中包含中文内容返回乱码问题 二.搭建配置消费客户端( ...
- 聊天斗图神器aidou mac中文版
aidou mac中文版是mac上一款专为斗图设计的聊天斗图神器,让您在聊天的时候不怕没有表情用,炫酷的表情即时更新,让您每时每刻都有新表情用!一键下载的表情包!小编现为您带来aidou斗图神器免费版 ...
- Mac M1原生(ARM64)Golang dev&debug
前言 通过本文最终实现了在M1芯片的Mac mini上的Goland的开发,并通过编译源码解决了无法DEBUG的问题. Go 1.16版将正式支持Apple Silicon M1芯片,即arm64架构 ...
- 1W字|40 图|硬核 ES 实战
前言 上篇我们讲到了 Elasticsearch 全文检索的原理<别只会搜日志了,求你懂点检索原理吧>,通过在本地搭建一套 ES 服务,以多个案例来分析了 ES 的原理以及基础使用.这次我 ...
- 玩转spring boot——负载均衡与session共享
前言 当项目上线后,如果要修复bug或扩充功能,都需要重启tomcat服务.此时,正在使用应用的用户们就需要等待服务器的重启,而这就会造成不好的用户体验.还有,当仅仅只有一台tomcat服务时,如果 ...
- 玩转spring boot——结合docker
前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 liunx机器上,也可以实现虚拟化.容器是完全使用沙箱机制,相互之间不会有 ...
随机推荐
- 前端学习 node 快速入门 系列 —— 模块(module)
其他章节请看: 前端学习 node 快速入门 系列 模块(module) 模块的导入 核心模块 在 初步认识 node 这篇文章中,我们在读文件的例子中用到了 require('fs'),在写最简单的 ...
- P2188 小Z的 k 紧凑数 题解(数位DP)
题目链接 小Z的 k 紧凑数 解题思路 数位DP,把每一个数位的每一个数对应的可能性表示出来,然后求\(num(1,r)-num(1,l-1)\),其中\(num(i,j)\)表示\([i,j]\)区 ...
- Java__包机制__用户输入
包机制 包机制的存在是为了解决当定义了多个类的时候,可能会出现类名重复的问题,包机制的存在可以解决这一冲突. 包的作用 把功能相似的类或者相关接口组织在同一个包里,方便再查找. 包名可以避免名字冲突. ...
- Codeforces Round #541 F. Asya And Kittens
题面: 传送门 题目描述: Asya把N只(从1-N编号)放到笼子里面,笼子是由一行N个隔间组成.两个相邻的隔间有一个隔板. Asya每天观察到有一对想一起玩,然后就会把相邻的隔间中的隔板取出来,使两 ...
- mysql连接不上本地服务器或者localhost:3306报错
今天初学MySQL数据库就遇到问题: 主要是本地服务器登录问题 workbench里双击那个connection出现的 解决方法: 1:看一看防火墙,这是最常见的,这种主要是防火墙限制了访问,可能是安 ...
- 攻防世界 reverse Windows_Reverse1
Windows_Reverse1 2019_DDCTF 查壳 脱壳 脱壳后运行闪退,(或许需要修复下IAT??),先IDA 静态分析一下 int __cdecl main(int argc, con ...
- springboot集成swagger实战(基础版)
1. 前言说明 本文主要介绍springboot整合swagger的全过程,从开始的swagger到Knife4j的进阶之路:Knife4j是swagger-bootstarp-ui的升级版,包括一些 ...
- 敏捷史话(十一):敏捷宣言“间谍”——Steve Mellor
Steve Mellor 是敏捷宣言的签署人之一,他自称是作为" 间谍"去参加雪鸟会议的. 起初收到会议邀请时,Steve 非常惊讶,因为他所做的工作一直都是关于建模方面的,很少将 ...
- [矩阵乘法] PKU3233 Matrix Power Series
[ 矩 阵 乘 法 ] M a t r i x P o w e r S e r i e s [矩阵乘法]Matrix Power Series [矩阵乘法]MatrixPowerSeries Desc ...
- OO第二单元——电梯作业总结
前言 本单元作业主要以设计电梯来实现多线程编程.本章主要学习了如何使用多线程以及如何确保多线程安全,从电梯的调度策略中学会了如何简单地使用synchronized锁来控制线程安全. 首先,明确锁的两个 ...