本教程實戰項目主要基於微信公眾號的開發講解微服務的實戰開發,整個過程中會講解如何拆分微服務,以及各微服務組件在實戰項目中的應用。
首先,我們創建一個springboot項目,為了后期各服務間的RPC調用,我們把整個項目拆分為三個子工程。XXX-service為服務的業務實現,同樣遵循MVC架構,XXX-model為RPC調用接口的實體類,XXX-feign為RPC調用接口,下面的項目中會詳細介紹這樣拆分為三個子工程的目的。
1、創建父工程open-weixin
父工程僅做版本的統一依賴,項目依賴包根據項目需求進行引入,切記把以前項目的所有依賴都引入,避免引入過多無用包,以及包沖突。
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<modules>
<module>weixin-service</module>
<module>weixin-model</module>
<module>weixin-feign</module>
</modules>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.2.RELEASE</version>
<relativePath/>
</parent>
<groupId>com.kevin</groupId>
<artifactId>open-weixin</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<properties>
<java.version>1.8</java.version>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.test.skip>true</maven.test.skip>
<!-- spring -->
<spring-cloud.version>Hoxton.SR5</spring-cloud.version>
<spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version>
<!--projects-->
<commons-beanutils.version>1.9.4</commons-beanutils.version>
<hutool-all.version>4.6.5</hutool-all.version>
<mybatis-plus.version>3.3.2</mybatis-plus.version>
</properties>
<dependencyManagement>
<dependencies>
<!--spring cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!--spring cloud alibaba-->
<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>
<!--工具類-->
<dependency>
<groupId>commons-beanutils</groupId>
<artifactId>commons-beanutils</artifactId>
<version>${commons-beanutils.version}</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>${hutool-all.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
2、創建子工程weixin-service
weixin-service子工程為一個springboot項目,所以我們創建一個springboot子工程。創建其余兩個子工程的目的主要要分離RPC調用接口;該項目基於微信公眾號開發,所以需要引入微信公眾號的一個開源框架,本教程使用的是weixin-java-mp,當然也有其他優秀的開源框架,根據自己需求選用。
2.1、項目依賴
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.kevin</groupId>
<artifactId>open-weixin</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>weixin-service</artifactId>
<dependencies>
<!--spring boot web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--微信公眾號框架-->
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-mp</artifactId>
<version>${weixin-java-mp.version}</version>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>com.github.jedis-lock</groupId>
<artifactId>jedis-lock</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>
目前,我們僅需要接入微信公眾號端,所以引入了mp的包,mp框架demo需要redis,相關依賴也需要引入,以上依賴包已經能滿足我們目前的需求,后續根據項目的需求逐漸增加,再次提醒大家,切記一次性引入所有常用的包。
2.2、微信公眾號初識
如果沒有微信公眾號開發經驗的同學可以先看一下微信公眾號官方文檔,了解微信公眾號開發流程。了解完之后我們基於mp的demo快速上手,下載mp框架demo,下載之后,我們把demo復制到我們的weixin-service項目中。復制后目錄結構如下:
2.3、微信公眾號參數申請
登陸微信公眾號開發平台,找到開發者工具
進入公眾平台測試賬號
獲取自己測試賬號的appId、appsecret,URL為回調地址,需要外網可以訪問(使用外網映射工具生成)、Token值自己輸入
至此,微信公眾號測試參數申請完成,下面進行公眾號的接入。
2.4、參數配置
上節我們獲取到微信公眾號參數,接下來把獲取的參數配置到項目的application.yml配置文件中,需要替換為自己的appId、secret、token配置內容如下:
logging:
level:
root: warn
com.kevin.weixin.service: info
com.kevin.weixin.service.repository: debug
org.springframework.web: INFO
com.kevin.weixin.service.wx.map: DEBUG
me.chanjar.weixin: DEBUG
wx:
mp:
useRedis: false
redisConfig:
host: 127.0.0.1
port: 6379
configs:
- appId: wx11111111
secret: 11111111
token: kevin
aesKey:
2.5、外網映射
下載一個外網映射工具,把我們本地的項目映射到外網地址,如下圖所示,我本地項目的9005端口已經被映射到了yn.free.qydev.com域名
2.6、微信公眾號服務端接入
啟動項目,並將項目中WxPortalController的接口填入到微信公眾平台的URL中,如圖所示:
點擊提交時,微信端會調用URL地址,進行服務端的驗證,服務端會打印出如下日志:
接收到來自微信服務器的認證消息:[ff64816b307eec715166cca735cbddd035a80f3b, 1598194834, 1720798230, 7056734206944775639]
公眾平台提交會提示配置成功信息,至此,微信公眾號已成功接入我們自己的服務端。