隨着電子商務的發展,移動支付也走進我們的日常生活,就像很多基礎業務,如物流、雲平台一樣,我們現在做什么都離不開她。正因為如此,支付是當下最活躍最前沿的話題,很多流行的技術最早用來實現支付,很多新的業務也最早用在支付上。
很慶幸,本人17年畢業后,開始參與銀聯的無卡快捷支付系統的開發,從而進入了支付這個行業,如今已經快兩年了,深知這個行業的特殊性:即業務+技術,她不僅需要會寫代碼,還需要了解金融的相關業務(如會計分錄,結算等),可以說是一個交叉的行業。我相信你一定聽說過區塊鏈這個概念,中本聰這位大神只有通曉金融+技術,才會創造出比特幣這個概念,才會提出區塊鏈技術,二者缺一不可。18年末年,我開始參與公司收銀台的開發,項目需要將原先的mvc架構改為微服務的架構。微服務的概念現在已經很成熟了,很多公司也都在進行架構的改造,我們使用的是公司自研的微服務架構,為了更好地提升自己,我在github上找了一個開源的支付項目xxPay(https://github.com/jmdhappy/xxpay-master)用來學習,本篇博客用來記錄搭建xxPay的全過程和搭建過程中遇到的坑。
運行環境:
win10 64位
idea
mysql(用的版本比原先項目版本高,導致很多地方需要改,如drive,mysql-connecter等都要升級)
activemq
java 1.8以上
zookeeper(運行dubbo的例子需要安裝)
下面開始介紹環境的安裝:
mysql安裝:
參考博客:
https://www.cnblogs.com/xsmile/p/7753984.html
https://blog.csdn.net/codingforhaifeng/article/details/80675498
https://www.cnblogs.com/sos-blue/p/6852945.html
https://www.cnblogs.com/jiangxiaobo/p/7089345.html
下載解壓后進入到mysql的bin目錄(需要用管理員運行),執行mysqld --initialize-insecure的時候,報了一個錯誤:msvcp140.dll,無法繼續執行代碼。解決辦法參考:https://zhidao.baidu.com/question/750269134284399172.html,需要去微軟官方下載VC++2015運行庫,安裝一下,再重新執行mysqld --initialize-insecure。
啟動mysql(需要用管理員運行)
設置root密碼
設置好密碼后,我們在cmd中登錄用root用戶登陸mysql,
mysql -u root -p 登錄root用戶,會提示輸入密碼
create database xxpaydb; 創建數據庫,xxpay項目要用到的數據庫xxpaydb
show databases; 顯示一下,看有沒有創建成功
創建xxPay項目需要的用戶xxpay
CREATE USER 'xxpay'@'localhost' IDENTIFIED BY 'xxpay'; 創建用戶和密碼 xxpay/xxpay
grant all on xxpaydb.* to 'xxpay'@'localhost'; 授權用戶操作xxpaydb,all代表所有的操作都可以
exit 推出root用戶
mysql -u xxpay -p 登陸xxpay用戶
show databases; 顯示一下可以用的數據庫,這個時候是可以看到xxpaydb的,沒有授權前,是看不到的。
use xxpaydb; 使用xxpaydb數據庫
source E:\code\idea-workspace\xxpay-master\init_db.sql; 執行創建表的sql文件
show tables; 看一下表是否創建成功
select *from information_schema.processlist; 查看一下數據庫的url,項目配置文件中要用到
activemq安裝:
這個還是蠻簡單的,只要有Java的運行環境就行了。首先是去官網下載:http://activemq.apache.org/components/classic/download/,根據你的平台選擇相應的版本,我的是windows的,下載后然后解壓,進入目錄apache-activemq-5.15.9-bin\apache-activemq-5.15.9\bin\win64,直接雙擊activemq.bat,一般沒有什么問題。然后在瀏覽器中輸入http://localhost:8161/admin/,用戶名admin,密碼admin,就可以查看相關的隊列信息了。
idea編譯項目:
接下來,我們在idea中導入GitHub上的xxPay項目,然后在idea項目的Terminal中輸入mvn clean package -Dmaven.test.skip=true,一段時間后,顯示如下:
可以看到各個模塊都可以編譯成功,但是這離運行還差很多,因為有很多參數要配置,而且我們也沒有可以部署的服務器,只能在本地運行,但不管怎么說,至少可以先跑一些程序。
上面編譯成功后,會生成相應的jar包,我們把相關的jar包都拷到一個目錄下,然后依次運行:
java -ms512m -mx512m -Xmn128m -Djava.awt.headless=true -XX:MaxPermSize=64m -jar xxpay-server.jar &
先啟動服務,這個啟動完成后,可以訪問Eureka的網址:http://localhost:2000/。
再運行java -ms512m -mx512m -Xmn128m -Djava.awt.headless=true -XX:MaxPermSize=64m -jar xxpay-config.jar &,運行后,在eureka服務注冊中心會增加這個服務xxpay-config,如下:
部署service的時候,報了Unable to load authentication plugin 'caching_sha2_password',需要執行以下命令:
ALTER USER 'xxpay'@'localhost' IDENTIFIED BY 'xxpay' PASSWORD EXPIRE NEVER; #修改加密規則
ALTER USER 'xxpay'@'localhost' IDENTIFIED WITH mysql_native_password BY 'xxpay'; #更新一下用戶的密碼
FLUSH PRIVILEGES; #刷新權限
繼續跑,出現問題:java.sql.SQLException: Unknown system variable 'tx_isolation'
解決方法:mysql-connector-java的版本太低,用的是5.1.43,升級為8.0.11.
繼續跑,出現問題:You must configure either the server or JDBC driver (via the serverTimezone
解決方法:mssql url后面加上&serverTimezone=UTC,用來設置一下時區。
因為安裝的mysql版本較高,mysql驅動要改為com.mysql.cj.jdbc.Driver。
xxpay-dal中用到了mysql的分頁,所有需要在項目module:xxpay-dal的pom.xml中添加如下依賴:
<dependency>
<groupId>com.github.jsqlparser</groupId>
<artifactId>jsqlparser</artifactId>
<version>1.1</version>
</dependency>
注意版本要高一點,否則會報錯。這中間遇到各種各樣的坑,一度想要放棄,不過最終還是慢慢地調試出來了。這步做完,會把service這個服務注冊到服務中心。
接着還有web和gateway的啟動,啟動方法類似,啟動完后,再看一下服務注冊中心:
接下來我們部署xxpay-mgr和xxpay-shop項目,部署方法類似上面的,先啟動mgr,啟動后,http://localhost:8092/,可以看到相關網頁。
部署xxpay-shop的時候,遇到一個問題,java.lang.NoClassDefFoundError: net/sf/jsqlparser/expression/Expression,這個問題上面有提到過,是因為沒有找到jsqlparse的jar包,怎么會找不到呢,去pom.xml一看,都沒有依賴xxpay-dal,怎么可能編譯成功,於是為shop加上項目依賴,shop依賴xxpay-dal
<dependency>
<groupId>org.xxpay</groupId>
<artifactId>xxpay-dal</artifactId>
<version>1.0.0</version>
</dependency>
再編譯一下,就可以了,然后部署,成功后,輸入網址http://localhost:8081/goods/openQrPay.html,就可以得到付款頁面:
至此,spring cloud的項目就可以部署了。接下來介紹dubbo的部署過程。
安裝zookeeper:
參考網上的例子,去官網上下載后,解壓縮,然后去conf中將zoo_sample.cfg改名為zoo.cfg,然后去bin目錄下運行zkServer.cmd,啟動zookeeper。