40 图 |我用 Mac M1 玩转 Spring Cloud

本文涉及的产品
对象存储 OSS,20GB 3个月
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 Tair(兼容Redis),内存型 2GB
简介: 40 图 |我用 Mac M1 玩转 Spring Cloud

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 上也能正常运行。

image-20210415202053473

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对象存储》

image-20210419211116806

二、安装 Docker

参考:

[](M1 运行 Docker)http://www.passjava.cn/#/05.%E5%AE%89%E8%A3%85%E9%83%A8%E7%BD%B2%E7%AF%87/09.M1%E8%BF%90%E8%A1%8CDocker

如果拉取镜像时非常慢,可以配置下镜像源。

三、运行必须的镜像

2.1 下载和运行 redis 镜像

参考链接

2.2 下载和运行 ZipKin 镜像

参考链接

四、初始化数据

创建数据库、表、初始化数据这些工作都需要做,下载一个 MySQL 客户端还是要方便点,然后找 Mac 上好用的客户端软件,下面是安装软件的艰辛历程。

4.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 上不能运行

2021.04,我试过安装 workbench,不能运行。
2021.11.28,我试过最新的 workbench,可以正常运行。

2.2.2 Squel Pro 在 M1 上不能运行

2021.04 安装 Squel Pro 后,切换数据库的时候程序崩溃。

image-20210416173839710

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

image-20210416224957858

重新安装依赖

cnpm install

4.4 启动后台

在根目录执行如下命令就可以启动后台了:

npm run dev

启动成功后,会自动打开浏览器,访问的地址是 http://localhost:8081

4.5 登陆后台

账号密码都是 admin,输入验证码即可登录。注意:如果验证码没有出现,说明 RenrenApplication 微服务有异常,请查看 IDEA 中打印出的 log。

登录后台界面如下图所示:

PassJava后台

4.6 添加题目分类

首先需要给题目进行分类,在后台点击新增类型,如下图所示:

注意:上传图片前需要启动 thirdparty 微服务,且 OSS 配置正确。

4.7 添加面试题

五、其他

5.1 未适配的镜像

我的开源项目中要用 Elasticsearch 和 Kibana 需要运行在 docker 上,目前这些镜像在 M1 上还未适配。

5.2 前端小程序

小程序的开发和测试在这里也不演示了, M1 上开发小程序完全没问题~

5.2 未添加的中间件

因本篇只是出于核心功能的演示,所以还有些中间件未提及,比如配置 Redis、链路追踪等,这些功能不影响 M1 上使用 Spring Cloud,所以会放在后续的文章中做进一步说明。

下一篇实战 Redis 也安排上了,敬请期待。

相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore &nbsp; &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
4月前
|
监控 负载均衡 Java
深入理解Spring Cloud中的服务网关
深入理解Spring Cloud中的服务网关
|
4月前
|
Java 开发工具 git
实现基于Spring Cloud的配置中心
实现基于Spring Cloud的配置中心
|
4月前
|
设计模式 监控 Java
解析Spring Cloud中的断路器模式原理
解析Spring Cloud中的断路器模式原理
|
4月前
|
资源调度 Java 调度
Spring Cloud Alibaba 集成分布式定时任务调度功能
Spring Cloud Alibaba 发布了 Scheduling 任务调度模块 [#3732]提供了一套开源、轻量级、高可用的定时任务解决方案,帮助您快速开发微服务体系下的分布式定时任务。
14960 29
|
4月前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
508 15
|
4月前
|
Java Spring
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
spring cloud gateway在使用 zookeeper 注册中心时,配置https 进行服务转发
113 3
|
4月前
|
消息中间件 Java 开发者
Spring Cloud微服务框架:构建高可用、分布式系统的现代架构
Spring Cloud是一个开源的微服务框架,旨在帮助开发者快速构建在分布式系统环境中运行的服务。它提供了一系列工具,用于在分布式系统中配置、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等领域的支持。
191 5
|
4月前
|
Java API 开发工具
Spring Boot与Spring Cloud Config的集成
Spring Boot与Spring Cloud Config的集成
|
4月前
|
存储 安全 Java
实现基于Spring Cloud的分布式配置管理
实现基于Spring Cloud的分布式配置管理